From b89a7ee8b956c96a1dcee995ea840feddc5d4b27 Mon Sep 17 00:00:00 2001 From: Pierre Frisch Date: Thu, 22 Dec 2011 07:25:50 -0800 Subject: First commit of Ninja to ninja-internal Signed-off-by: Valerio Virgillito --- js/helper-classes/RDGE/src/core/script/sockets.js | 166 ++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 js/helper-classes/RDGE/src/core/script/sockets.js (limited to 'js/helper-classes/RDGE/src/core/script/sockets.js') diff --git a/js/helper-classes/RDGE/src/core/script/sockets.js b/js/helper-classes/RDGE/src/core/script/sockets.js new file mode 100644 index 00000000..28c43387 --- /dev/null +++ b/js/helper-classes/RDGE/src/core/script/sockets.js @@ -0,0 +1,166 @@ +/* +This file contains proprietary software owned by Motorola Mobility, Inc.
+No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. +
*/ + +/* +* Simple socket connection discovery and management +*/ + +g_connectionManager = null; + +function CreateSocket(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 +"
"; + + 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 +"
"; + } + + return ws; +} + +// The DCHP range on Whitney 10.0.0.1 - 10.0.0.254 + +/* +* 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 +*/ +function ConnectionPool(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) + { + // emtpy 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 +"
"; + } + + 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); + } + } + + } + +} + -- cgit v1.2.3