3 local f = io.open("websocket2.trace", "a")
4 f:write(os.date() .. " - " .. text .. "\n")
9 return mg.lua_type == "websocket"
12 trace("called with Lua type " .. tostring(mg.lua_type))
14 if not iswebsocket() then
16 mg.write("HTTP/1.0 403 Forbidden\r\n")
17 mg.write("Connection: close\r\n")
24 -- Serialize table to string
27 if type(val) == "table" then
28 for k,v in pairs(val) do
30 t = t .. ", " .. ser(k) .. "=" .. ser(v)
32 t = "{" .. ser(k) .. "=" .. ser(v)
42 -- table of all active connection
45 -- function to get a client identification string
47 local ri = allConnections[tab.client].request_info
48 return ri.remote_addr .. ":" .. ri.remote_port
51 -- Callback to accept or reject a connection
53 allConnections[tab.client] = tab
54 trace("open[" .. who(tab) .. "]: " .. ser(tab))
55 return true -- return true to accept the connection
58 -- Callback for "Websocket ready"
60 trace("ready[" .. who(tab) .. "]: " .. ser(tab))
61 mg.write(tab.client, "text", "Websocket ready")
62 mg.write(tab.client, 1, "-->h 180");
63 mg.write(tab.client, "-->m 180");
65 mg.set_interval(timer, 1)
66 return true -- return true to keep the connection open
69 -- Callback for "Websocket received data"
71 trace("data[" .. who(tab) .. "]: " .. ser(tab))
73 return true -- return true to keep the connection open
76 -- Callback for "Websocket is closing"
78 trace("close[" .. who(tab) .. "]: " .. ser(tab))
79 mg.write("text", "end")
80 allConnections[tab.client] = nil
84 local date = os.date('*t');
85 local hand = (date.hour%12)*60+date.min;
87 mg.write("text", string.format("%u:%02u:%02u", date.hour, date.min, date.sec));
89 if (hand ~= lasthand) then
90 mg.write(1, string.format("-->h %f", hand*360/(12*60)));
91 mg.write( string.format("-->m %f", date.min*360/60));
95 if bits and content then
103 return true -- return true to keep an interval timer running