var reconnectTimeout = 3000; var ws_url; var ws; function setColor(element, color) { element.style.border = '2px solid ' + color; } var out = function(message) { var div = document.createElement('div'); div.innerHTML = message; document.getElementById('output').appendChild(div); }; function ws_connect() { console.log("Connecting to websocket at " + ws_url); ws = new WebSocket(ws_url); ws.onopen = function(ev) { setColor(maplabel, 'green'); var msg = 'LAST'; // out('SENT: ' + msg); ws.send(msg); }; ws.onclose = function(ev) { setColor(maplabel, 'red'); setTimeout(ws_connect, reconnectTimeout); }; ws.onmessage = function(ev) { if (!ev.data) { // out('PING... '); } else { // out('RESPONSE: ' + ev.data + ' '); try { var loc = JSON.parse(ev.data); if (loc['_label']) { document.getElementById('maplabel').textContent = loc['_label']; } if (loc['_type'] == 'location') { map_marker(loc); } } catch (x) { ; } } }; ws.onerror = function(ev) { out('ERROR: ' + ev.data); }; } window.onload = function() { // var url = 'ws://' + location.host + '/ws/last'; // console.log(JSON.stringify(location)); var url = ("https:" == document.location.protocol ? "wss://" : "ws://") + location.host + "/"; var parts = location.pathname.split('/'); for (var i = 1; i < parts.length - 2; i++) { url = url + parts[i] + "/"; } url = url + "ws/last"; console.log("Websocket URI: " + url); ws_url = url; ws_connect(); };