60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
|
//>>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;
|
||
|
};
|
||
|
|
||
|
});
|