/* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ function get_appropriate_ws_url() { var pcol; var u = document.URL; /* * We open the websocket encrypted if this page came on an * https:// url itself, otherwise unencrypted */ if (u.substring(0, 5) == "https") { pcol = "wss://"; u = u.substr(8); } else { pcol = "ws://"; if (u.substring(0, 4) == "http") u = u.substr(7); } u = u.split('/'); return pcol + u[0]; } var socket_task = new WebSocket(get_appropriate_ws_url(), "lws-task-protocol"); try { socket_task.onopen = function() { var connectEvent = new CustomEvent("connectEvent", { detail: { time: new Date(), }, bubbles: true, cancelable: true }); document.dispatchEvent(connectEvent); } socket_task.onmessage = function got_packet(msg) { var messageEvent = new CustomEvent("messageEvent", { detail: { message: msg.data, time: new Date(), }, bubbles: true, cancelable: true }); document.dispatchEvent(messageEvent); var msgs = new Array(); var idx = 0; msgs[idx] = ''; var c = 0; var instring = false; for(c = 0; c < msg.data.length; c++) { if(msg.data[c] == '"' && c > 0 && msg.data[c - 1] != '\\') instring = !instring; if(msg.data[c] == ';' && instring == false) { idx++; msgs[idx] = ''; } if(msg.data[c] != ';' || instring == true) msgs[idx] += msg.data[c]; } f = 0; while (f < msgs.length - 1) { var msg = new Array(); instring = false; idx = 0; // Strip padding and trailing whitespace. var msgstr = msgs[f].replace(/^\s+||\s+$/g,''); if(msgstr == ';') { f++; continue; } msg[idx] = ''; for(c = 0; c < msgstr.length; c++) { if(msgstr[c] == '"' && c > 0 && msgstr[c - 1] != '\\') { instring = !instring; continue; } if(msgstr[c] == ' ' && instring == false) { msg[idx] = msg[idx].replace("\\\\","\\").replace("\\\"","\""); idx++; msg[idx] = ''; } if(msgstr[c] != ' ' || instring == true) msg[idx] += msgstr[c]; } var observeid = msg[0]; var cmd = msg[1]; var id = msg[2]; if(cmd == "remove") { var removeEvent = new CustomEvent("removeEvent", { detail: { observeid: observeid, id: id, }, bubbles: true, cancelable: true }); document.dispatchEvent(removeEvent); } else if(cmd == "move") { var moveEvent = new CustomEvent("moveEvent", { detail: { observeid: observeid, id: id, parentid: msg[3], }, bubbles: true, cancelable: true }); document.dispatchEvent(moveEvent); } else if(cmd == "create") { var createEvent = new CustomEvent("createEvent", { detail: { observeid: observeid, id: id, parentid: msg[3], }, bubbles: true, cancelable: true }); document.dispatchEvent(createEvent); } else if(cmd == "update") { var updateEvent = new CustomEvent("updateEvent", { detail: { observeid: observeid, id: id, name: msg[3], value: msg[4], }, bubbles: true, cancelable: true }); document.dispatchEvent(updateEvent); } f++; } } socket_task.onclose = function(){ var disconnectEvent = new CustomEvent("disconnectEvent", { detail: { time: new Date(), }, bubbles: true, cancelable: true }); document.dispatchEvent(disconnectEvent); } } catch(exception) { alert('

Error' + exception + '

'); }