1d4afb5ceSopenharmony_civar head = 0, tail = 0, ring = new Array(); 2d4afb5ceSopenharmony_ci 3d4afb5ceSopenharmony_cifunction get_appropriate_ws_url(extra_url) 4d4afb5ceSopenharmony_ci{ 5d4afb5ceSopenharmony_ci var pcol; 6d4afb5ceSopenharmony_ci var u = document.URL; 7d4afb5ceSopenharmony_ci 8d4afb5ceSopenharmony_ci /* 9d4afb5ceSopenharmony_ci * We open the websocket encrypted if this page came on an 10d4afb5ceSopenharmony_ci * https:// url itself, otherwise unencrypted 11d4afb5ceSopenharmony_ci */ 12d4afb5ceSopenharmony_ci 13d4afb5ceSopenharmony_ci if (u.substring(0, 5) === "https") { 14d4afb5ceSopenharmony_ci pcol = "wss://"; 15d4afb5ceSopenharmony_ci u = u.substr(8); 16d4afb5ceSopenharmony_ci } else { 17d4afb5ceSopenharmony_ci pcol = "ws://"; 18d4afb5ceSopenharmony_ci if (u.substring(0, 4) === "http") 19d4afb5ceSopenharmony_ci u = u.substr(7); 20d4afb5ceSopenharmony_ci } 21d4afb5ceSopenharmony_ci 22d4afb5ceSopenharmony_ci u = u.split("/"); 23d4afb5ceSopenharmony_ci 24d4afb5ceSopenharmony_ci /* + "/xxx" bit is for IE10 workaround */ 25d4afb5ceSopenharmony_ci 26d4afb5ceSopenharmony_ci return pcol + u[0] + "/" + extra_url; 27d4afb5ceSopenharmony_ci} 28d4afb5ceSopenharmony_ci 29d4afb5ceSopenharmony_cifunction new_ws(urlpath, protocol) 30d4afb5ceSopenharmony_ci{ 31d4afb5ceSopenharmony_ci return new WebSocket(urlpath, protocol); 32d4afb5ceSopenharmony_ci} 33d4afb5ceSopenharmony_ci 34d4afb5ceSopenharmony_cidocument.addEventListener("DOMContentLoaded", function() { 35d4afb5ceSopenharmony_ci 36d4afb5ceSopenharmony_ci var ws = new_ws(get_appropriate_ws_url(""), "lws-minimal"); 37d4afb5ceSopenharmony_ci try { 38d4afb5ceSopenharmony_ci ws.onopen = function() { 39d4afb5ceSopenharmony_ci document.getElementById("r").disabled = 0; 40d4afb5ceSopenharmony_ci }; 41d4afb5ceSopenharmony_ci 42d4afb5ceSopenharmony_ci ws.onmessage =function got_packet(msg) { 43d4afb5ceSopenharmony_ci var n, s = ""; 44d4afb5ceSopenharmony_ci 45d4afb5ceSopenharmony_ci ring[head] = msg.data + "\n"; 46d4afb5ceSopenharmony_ci head = (head + 1) % 50; 47d4afb5ceSopenharmony_ci if (tail === head) 48d4afb5ceSopenharmony_ci tail = (tail + 1) % 50; 49d4afb5ceSopenharmony_ci 50d4afb5ceSopenharmony_ci n = tail; 51d4afb5ceSopenharmony_ci do { 52d4afb5ceSopenharmony_ci s = s + ring[n]; 53d4afb5ceSopenharmony_ci n = (n + 1) % 50; 54d4afb5ceSopenharmony_ci } while (n !== head); 55d4afb5ceSopenharmony_ci 56d4afb5ceSopenharmony_ci document.getElementById("r").value = s; 57d4afb5ceSopenharmony_ci document.getElementById("r").scrollTop = 58d4afb5ceSopenharmony_ci document.getElementById("r").scrollHeight; 59d4afb5ceSopenharmony_ci }; 60d4afb5ceSopenharmony_ci 61d4afb5ceSopenharmony_ci ws.onclose = function(){ 62d4afb5ceSopenharmony_ci document.getElementById("r").disabled = 1; 63d4afb5ceSopenharmony_ci }; 64d4afb5ceSopenharmony_ci } catch(exception) { 65d4afb5ceSopenharmony_ci alert("<p>Error " + exception); 66d4afb5ceSopenharmony_ci } 67d4afb5ceSopenharmony_ci 68d4afb5ceSopenharmony_ci}, false); 69