<!DOCTYPE HTML> | |
<html xmlns="http://www.w3.org/1999/xhtml"> | |
<head> | |
<meta charset="UTF-8"></meta> | |
<title>Websocket test</title> | |
<style type="text/css" media="screen"> | |
body { background:#eee; margin:0 } | |
.main { | |
display:block; border:1px solid #ccc; position:absolute; | |
top:5%; left:5%; width:90%; height:90%; background:#fff; | |
} | |
</style> | |
</head> | |
<body> | |
<script type="text/javascript"><![CDATA[ | |
var connection; | |
var websock_text_field; | |
var hand_hour; | |
var hand_min; | |
function queryStringElem(name, idx) { | |
if (typeof(queryStringElem_Table) != "object") { | |
queryStringElem_Table = {}; | |
window.location.search.slice(1).split('&').forEach( | |
function(keyValuePair) { | |
keyValuePair = keyValuePair.split('='); | |
if (typeof(queryStringElem_Table[keyValuePair[0]]) != "object") { | |
queryStringElem_Table[keyValuePair[0]] = []; | |
} | |
var idx = queryStringElem_Table[keyValuePair[0]].length+1; | |
queryStringElem_Table[keyValuePair[0]][idx] = keyValuePair[1] || ''; | |
} | |
); | |
} | |
idx = idx || 1; | |
if (queryStringElem_Table[name]) { | |
return queryStringElem_Table[name][idx]; | |
} | |
return null; | |
} | |
function webSockKeepAlive() { | |
if (keepAlive) { | |
connection.send('client still alive'); | |
console.log('send keep alive') | |
setTimeout("webSockKeepAlive()", 10000); | |
} | |
} | |
function load() { | |
var wsproto = (location.protocol === 'https:') ? "wss:" : "ws:"; | |
connection = new WebSocket(wsproto + "//" + window.location.host + "/websocket.lua"); | |
websock_text_field = document.getElementById('websock_text_field'); | |
hand_min = document.getElementById('hand_min'); | |
hand_hour = document.getElementById('hand_hour'); | |
var ka = queryStringElem("keepAlive"); | |
if (ka) { | |
ka = ka.toLowerCase(); | |
use_keepAlive = (ka!="false") && (ka!="f") && (ka!="no") && (ka!="n") && (ka!=0); | |
} else { | |
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) { | |
var lCmd = e.data.substring(0,3); | |
if (lCmd == "-->") { | |
console.log(e.data); | |
var lDirection = Number(e.data.substring(5)); | |
if (e.data[3] == 'h') { | |
hand_hour.setAttribute("transform", "rotate(" + lDirection + " 800 600)"); | |
} | |
if (e.data[3] == 'm') { | |
hand_min.setAttribute("transform", "rotate(" + lDirection + " 800 600)"); | |
} | |
} else { | |
websock_text_field.textContent = e.data; | |
} | |
}; | |
console.log("load"); | |
} | |
]]></script> | |
<svg class="main" | |
xmlns="http://www.w3.org/2000/svg" | |
xmlns:svg="http://www.w3.org/2000/svg" | |
version="1.1" | |
xmlns:xlink="http://www.w3.org/1999/xlink" | |
viewBox="0 0 1600 1200" preserveAspectRatio="xMinYMin meet" | |
onload="load()" | |
> | |
<circle id="line_a" cx="800" cy="600" r="500" style="stroke:rgb(255,0,0); stroke-width:5; fill:rgb(200,200,200)"/> | |
<polygon points="800,200 900,300 850,300 850,600 750,600 750,300 700,300" style="fill:rgb(100,0,0)" transform="rotate(0,800,600)" id="hand_hour"/> | |
<polygon points="800,100 840,200 820,200 820,600 780,600 780,200 760,200" style="fill:rgb(0,100,0)" transform="rotate(0,800,600)" id="hand_min"/> | |
<text id="websock_text_field" x="800" y="600" text-anchor="middle" font-size="50px" fill="red">No websocket connection yet</text> | |
</svg> | |
</body> | |
</html> |