| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | 
							- timerID = "timeout"
 
- --timerID = "interval"
 
- function trace(text)
 
-     local f = io.open("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
 
- -- table of all active connection
 
- allConnections = {}
 
- -- function to get a client identification string
 
- function who(tab)
 
-   local ri = allConnections[tab.client].request_info
 
-   return ri.remote_addr .. ":" .. ri.remote_port
 
- end
 
- -- Callback to accept or reject a connection
 
- function open(tab)
 
-   allConnections[tab.client] = tab
 
-   trace("open[" .. who(tab) .. "]: " .. ser(tab))
 
-   return true -- return true to accept the connection
 
- end
 
- -- Callback for "Websocket ready"
 
- function ready(tab)
 
-   trace("ready[" .. who(tab) .. "]: " .. ser(tab))
 
-   mg.write(tab.client, "text", "Websocket ready")
 
-   mg.write(tab.client, 1, "-->h 180");
 
-   mg.write(tab.client, "-->m 180");
 
-   senddata()
 
-   if timerID == "timeout" then
 
-     mg.set_timeout("timer()", 1)
 
-   elseif timerID == "interval" then
 
-     mg.set_interval("timer()", 1)
 
-   end
 
-   return true -- return true to keep the connection open
 
- end
 
- -- Callback for "Websocket received data"
 
- function data(tab)
 
-     trace("data[" .. who(tab) .. "]: " .. ser(tab))
 
-     senddata()
 
-     return true -- return true to keep the connection open
 
- end
 
- -- Callback for "Websocket is closing"
 
- function close(tab)
 
-     trace("close[" .. who(tab) .. "]: " .. ser(tab))
 
-     mg.write("text", "end")
 
-     allConnections[tab.client] = nil
 
- end
 
- function 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(1, string.format("-->h %f", hand*360/(12*60)));
 
-         mg.write(   string.format("-->m %f", date.min*360/60));
 
-         lasthand = hand;
 
-     end
 
-     if bits and content then
 
-         data(bits, content)
 
-     end
 
- end
 
- function timer()
 
-     trace("timer")
 
-     senddata()
 
-     if timerID == "timeout" then
 
-         mg.set_timeout("timer()", 1)
 
-     else
 
-         return true -- return true to keep an interval timer running
 
-     end
 
- end
 
 
  |