#!/usr/bin/lua local json = require("json") local server = require("nginx.websocket.server") local sqlite = require("lsqlite3") local basepath = "/home/paul/git/micodus_server" local dbfile = string.format("%s/data/tracker.db",basepath) local query = [[ SELECT time,latitude,longitude,height,speed,direction,serial FROM log ORDER BY time DESC LIMIT 1; ]] --ngx.shared.geo:set("last_time","") function getdata() local db = sqlite.open(dbfile,sqlite3.OPEN_READONLY) local res, vm = db:nrows(query) local data for row in res, vm do data = { ["time"]=row.time, ["latitude"]=row.latitude, ["longitude"]=row.longitude, ["height"]=row.height, ["speed"]=row.speed, ["direction"]=row.direction, ["serial"]=row.serial, } end db:close() return data end function geows() local locstr = nil local wb, err = server:new { timeout = 5000, max_payload_len = 65535 } if not wb then ngx.log(ngx.ERR, "failed to new websocket: ", err) return ngx.exit(444) end local last_time = nil while true do local data = getdata() if data.time ~= last_time then local locstr = json.encode(data) local bytes, err = wb:send_text(locstr) if not bytes then ngx.log(ngx.ERR, "failed to send text: ", err) return ngx.exit(444) end last_time = data.time end ngx.sleep(1) end wb:send_close() end geows()