diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/socket/Reconnect.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/socket/Reconnect.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/socket/Reconnect.js b/js/dojo-1.7.2/dojox/socket/Reconnect.js new file mode 100644 index 0000000..8bcd052 --- /dev/null +++ b/js/dojo-1.7.2/dojox/socket/Reconnect.js @@ -0,0 +1,59 @@ +//>>built +// wrapped by build app +define("dojox/socket/Reconnect", ["dijit","dojo","dojox"], function(dijit,dojo,dojox){ +dojo.provide("dojox.socket.Reconnect"); + +dojox.socket.Reconnect = function(socket, options){ + // summary: + // Provides auto-reconnection to a websocket after it has been closed + // socket: + // Socket to add reconnection support to. + // returns: + // An object that implements the WebSocket API + // example: + // You can use the Reconnect module: + // | dojo.require("dojox.socket"); + // | dojo.require("dojox.socket.Reconnect"); + // | var socket = dojox.socket({url:"/comet"}); + // | // add auto-reconnect support + // | socket = dojox.socket.Reconnect(socket); + options = options || {}; + var reconnectTime = options.reconnectTime || 10000; + + var connectHandle = dojo.connect(socket, "onclose", function(event){ + clearTimeout(checkForOpen); + if(!event.wasClean){ + socket.disconnected(function(){ + dojox.socket.replace(socket, newSocket = socket.reconnect()); + }); + } + }); + var checkForOpen, newSocket; + if(!socket.disconnected){ + // add a default impl if it doesn't exist + socket.disconnected = function(reconnect){ + setTimeout(function(){ + reconnect(); + checkForOpen = setTimeout(function(){ + //reset the backoff + if(newSocket.readyState < 2){ + reconnectTime = options.reconnectTime || 10000; + } + }, 10000); + }, reconnectTime); + // backoff each time + reconnectTime *= options.backoffRate || 2; + }; + } + if(!socket.reconnect){ + // add a default impl if it doesn't exist + socket.reconnect = function(){ + return socket.args ? + dojox.socket.LongPoll(socket.args) : + dojox.socket.WebSocket({url: socket.URL || socket.url}); // different cases for different impls + }; + } + return socket; +}; + +}); |
