/* <copyright> This file contains proprietary software owned by Motorola Mobility, Inc.<br/> No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. </copyright> */ // RDGE namespaces var RDGE = RDGE || {}; /* * Simple socket connection discovery and management */ RDGE.CreateSocket = function (url, listenList, connectedList, messageHandler, socketID, openHandler, closeHandler) { var ws = new WebSocket(url); ws.listenIndex = socketID; ws.onmessage = messageHandler; ws.connectedList = connectedList; ws.listenList = listenList; // make up a flag ws.rdge_isConnected = false; ws.rdge_tryDisconnect = false; if (openHandler) { ws.addEventListener("open", openHandler); } if (closeHandler) { ws.addEventListener("close", closeHandler); ws.addEventListener("error", closeHandler); } ws.onopen = function (evt) { var websocket = evt.srcElement; document.getElementById("socketConnection").innerHTML += "connected: " + websocket.URL + "</br>"; websocket.rdge_isConnected = true; websocket.connectedList.push(ws); // save the connected array index of this item ws.connectedIndex = websocket.connectedList.length - 1; }; ws.onerror = function (event) { window.console.log("error: " + event); } ws.onclose = function (evt) { var websocket = evt.srcElement; websocket.rdge_isConnected = false; // send disconnect message websocket.send("type=srv\nmsg=2\n"); // remove from connected sockets websocket.connectedList[websocket.connectedIndex, 1]; // re-open port for listening //websocket.listenList[websocket.listenIndex] = new WebSocket(websocket.URL.toString()); //document.getElementById("socketConnection").innerHTML += "disconnected: " + websocket.URL +"</br>"; }; return ws; }; // The DCHP range on Whitney 10.0.0.1 - 10.0.0.254 // add the connection Pool's to this list for auto polling RDGE.ConnPoll = function() { var len = RDGE.globals.poolList.length; for (var i = 0; i < len; ++i) { RDGE.globals.poolList[i].Poll(); } }; /* * manages a connection * @param base: base url minus the last octet (ie "ws://192.168.1.") * @param startAddr: the last octect of the beginning address range (ie 10.0.0.x where x is the value passed in for startAddr) * @param endAddr: the last octect of the end address range (ie 10.0.0.x where x is the value passed in for endAddr) * @param messageHandlerFunc: handle to onMessage function */ RDGE.ConnectionPool = funciton(base, startAddr, endAddr, messageHandlerFunc) { this.start = startAddr; this.end = endAddr; this.port = 38951; this.messageHandler = messageHandlerFunc; this.listenSockets = []; this.connectedSockets = []; this.openHandler = null; this.closeHandler = null; this.interval = null; this.Init = function (openHandler, closeHandler) { // empty out lists this.listenSockets = []; this.connectedSockets = []; this.openHandler = openHandler; this.closeHandler = closeHandler; var len = this.end - this.start; for (var i = 0; i < len; ++i) { var url = base + (this.start + i) + ":" + this.port + "/resourcePath"; var ws = CreateSocket(url, this.listenSockets, this.connectedSockets, this.messageHandler, i, this.openHandler, this.closeHandler); this.listenSockets.push(ws); } this.interval = setInterval(ConnPoll, 200); }; this.Shutdown = function () { if (this.interval != null) { clearInterval(this.interval); this.interval = null; } var len = this.connectedSockets.length; for (var i = 0; i < len; ++i) { // send disconnect message this.connectedSockets[i].send("type=srv\nmsg=2\n"); ; } }; this.Close = function (socket) { socket.rdge_tryDisconnect = true; }; this.Poll = function () { var len = this.end - this.start; for (var i = 0; i < len; ++i) { // re init the sockets to simulate broadcast if (this.listenSockets[i].readyState == 3/*CLOSING*/ || this.listenSockets[i].readyState == 2/*CLOSING*/ || this.listenSockets[i].rdge_tryDisconnect == true) { if (this.listenSockets[i].rdge_tryDisconnect) { document.getElementById("socketConnection").innerHTML += "graceful discon: " + this.listenSockets[i].URL + "</br>"; } this.listenSockets[i].rdge_tryDisconnect = false; var url = base + (this.start + i) + ":" + this.port + "/resourcePath"; this.listenSockets[i].close(); this.listenSockets[i] = CreateSocket(url, this.listenSockets, this.connectedSockets, this.messageHandler, i, this.openHandler, this.closeHandler); } } }; };