1
0
mirror of https://github.com/lammertb/libhttp.git synced 2025-08-16 11:21:57 +03:00
Files
libhttp/test/websocket.lua
2014-05-24 00:14:37 +02:00

100 lines
2.2 KiB
Lua

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
-- table of all active connection
allConnections = {}
-- function to get a client identification string
function who(tab)
local ri = allConnections[tab.client]
return ri.remote_addr .. ":" .. ri.remote_port
end
-- Callback to reject a connection
function open(tab)
allConnections[tab.client] = tab.request_info
trace("open[" .. who(tab) .. "]: " .. ser(tab))
return true
end
-- Callback for "Websocket ready"
function ready(tab)
trace("ready[" .. who(tab) .. "]: " .. ser(tab))
mg.write("text", "Websocket ready")
senddata()
return true
end
-- Callback for "Websocket received data"
function data(tab)
trace("data[" .. who(tab) .. "]: " .. ser(tab))
senddata()
return true
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()
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