1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- -- Open database
- local db = sqlite3.open('r:\\websockLog.db')
- if db then
- db:busy_timeout(200);
- -- Create a table if it is not created already
- db:exec([[
- CREATE TABLE IF NOT EXISTS requests (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- timestamp NOT NULL,
- method NOT NULL,
- uri NOT NULL,
- addr
- );
- ]])
- end
- local function logDB(method)
- -- Add entry about this request
- local r;
- repeat
- r = db:exec([[INSERT INTO requests VALUES(NULL, datetime("now"), "]] .. method .. [[", "]] .. mg.request_info.uri .. [[", "]] .. mg.request_info.remote_port .. [[");]]);
- until r~=5;
- end
- -- Callback for "Websocket ready"
- function ready()
- logDB("WEBSOCKET READY")
- mg.write("text", "Websocket ready")
- end
- -- Callback for "Websocket received data"
- function data(bits, content)
- logDB(string.format("WEBSOCKET DATA (%x)", bits))
- mg.write("text", os.date())
- return true;
- end
- -- Callback for "Websocket is closing"
- function close()
- logDB("WEBSOCKET CLOSE")
- -- Close database
- db:close()
- end
- -- Websocket with coroutines
- logDB("WEBSOCKET PREPARE")
- coroutine.yield(true); -- first yield returns (true) or (false) to accept or reject the connection
- ready()
- repeat
- local cont, bits, content = coroutine.yield(true, 1.0)
- if bits and content then
- data(bits, content)
- end
- until not cont;
- mg.write("text", "end")
- close()
|