function trace(text) local f = io.open("R:\\websocket.trace", "a") f:write(os.date() .. " - " .. text .. "\n") f:close() end function iswebsocket() return mg.lua_type == "websocket" --return pcall(function() -- if (string.upper(mg.request_info.http_headers.Upgrade)~="WEBSOCKET") then error("") end --end) end trace("called with Lua type " .. tostring(mg.lua_type)) if not iswebsocket() then trace("no websocket") mg.write("HTTP/1.0 403 Forbidden\r\n") mg.write("Connection: close\r\n") mg.write("\r\n") mg.write("forbidden") return end -- Serialize table to string function ser(val) local t if type(val) == "table" then for k,v in pairs(val) do if t then t = t .. ", " .. ser(k) .. "=" .. ser(v) else t = "{" .. ser(k) .. "=" .. ser(v) end end t = t .. "}" else t = tostring(val) end return t end -- Callback to reject a connection function open() trace("open") return true end -- Callback for "Websocket ready" function ready(tab) trace("ready: " .. ser(tab)) mg.write("text", "Websocket ready") senddata() return true end -- Callback for "Websocket received data" function data(tab) trace("data: " .. ser(tab)) senddata() return true end -- Callback for "Websocket is closing" function close(tab) trace("close: " .. ser(tab)) mg.write("text", "end") end function senddata() trace("senddata") local date = os.date('*t'); local hand = (date.hour%12)*60+date.min; mg.write("text", string.format("%u:%02u:%02u", date.hour, date.min, date.sec)); if (hand ~= lasthand) then mg.write("text", string.format("-->h %u", hand*360/(12*60))); mg.write("text", string.format("-->m %u", date.min*360/60)); lasthand = hand; end if bits and content then data(bits, content) end end