| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | if mg.lua_type ~= "websocket" then  mg.write("HTTP/1.0 200 OK\r\n")  mg.write("Connection: close\r\n")  mg.write("\r\n")  mg.write("<!DOCTYPE HTML>\r\n")  mg.write("<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n")  mg.write("<head>\r\n")  mg.write("<meta charset=\"UTF-8\"></meta>\r\n")  mg.write("<title>Server stats</title>\r\n")  mg.write("</head>\r\n")  mg.write("<body onload=\"load()\">\r\n")  mg.write([====[  <script type="text/javascript">    var connection;    var data_field;    function webSockKeepAlive() {      if (keepAlive) {        connection.send('Ok');        setTimeout("webSockKeepAlive()", 10000);      }    }    function load() {      var wsproto = (location.protocol === 'https:') ? "wss:" : "ws:";      connection = new WebSocket(wsproto + "//" + window.location.host + window.location.pathname);      data_field = document.getElementById('data');      data_field.innerHTML = "wait for data";      use_keepAlive = true;      connection.onopen = function () {        keepAlive = use_keepAlive;        webSockKeepAlive();      };      // Log errors      connection.onerror = function (error) {        keepAlive = false;        alert("WebSocket error");        connection.close();      };      // Log messages from the server      connection.onmessage = function (e) {          data_field.innerHTML = e.data;      };    }</script>]====])  mg.write("<div id='data'>Wait for page load</div>\r\n")  mg.write("</body>\r\n")  mg.write("</html>\r\n")  returnendfunction table.count(tab)  local count = 0  for _ in pairs(tab) do    count = count + 1  end  return countend-- table of all active connectionallConnections = {}connCount = table.count(allConnections)-- function to get a client identification stringfunction who(tab)  local ri = allConnections[tab.client].request_info  return ri.remote_addr .. ":" .. ri.remote_portend-- Callback to accept or reject a connectionfunction open(tab)  allConnections[tab.client] = tab  connCount = table.count(allConnections)  return true -- return true to accept the connectionend-- Callback for "Websocket ready"function ready(tab)  senddata()  return true -- return true to keep the connection openend-- Callback for "Websocket received data"function data(tab)    senddata()    return true -- return true to keep the connection openend-- Callback for "Websocket is closing"function close(tab)    allConnections[tab.client] = nil    connCount = table.count(allConnections)endfunction senddata()    local date = os.date('*t');    collectgarbage("collect"); -- Avoid adding uncollected Lua memory from this state    mg.write(string.format([[{"Time": "%u:%02u:%02u", "Date": "%04u-%02u-%02u", "Context": %s, "Common": %s, "System": \"%s\", "ws_status": {"Memory": %u, "Connections": %u}}]],date.hour, date.min, date.sec,date.year, date.month, date.day,mg.get_info("context"), mg.get_info("common"), mg.get_info("system"),collectgarbage("count")*1024,connCount));endfunction timer()    senddata()    mg.set_timeout("timer()", 1)    endmg.set_timeout("timer()", 1)
 |