116 lines
2.4 KiB
JavaScript
116 lines
2.4 KiB
JavaScript
//>>built
|
|
define("dojox/socket",["dojo","dojo/Evented","dojo/cookie","dojo/_base/url"],function(_1,_2){
|
|
var _3=window.WebSocket;
|
|
function _4(_5){
|
|
if(typeof _5=="string"){
|
|
_5={url:_5};
|
|
}
|
|
return _3?dojox.socket.WebSocket(_5,true):dojox.socket.LongPoll(_5);
|
|
};
|
|
dojox.socket=_4;
|
|
_4.WebSocket=function(_6,_7){
|
|
var ws=new _3(new _1._Url(document.baseURI.replace(/^http/i,"ws"),_6.url));
|
|
ws.on=function(_8,_9){
|
|
ws.addEventListener(_8,_9,true);
|
|
};
|
|
var _a;
|
|
_1.connect(ws,"onopen",function(_b){
|
|
_a=true;
|
|
});
|
|
_1.connect(ws,"onclose",function(_c){
|
|
if(_a){
|
|
return;
|
|
}
|
|
if(_7){
|
|
_4.replace(ws,dojox.socket.LongPoll(_6),true);
|
|
}
|
|
});
|
|
return ws;
|
|
};
|
|
_4.replace=function(_d,_e,_f){
|
|
_d.send=_1.hitch(_e,"send");
|
|
_d.close=_1.hitch(_e,"close");
|
|
if(_f){
|
|
_10("open");
|
|
}
|
|
_1.forEach(["message","close","error"],_10);
|
|
function _10(_11){
|
|
(_e.addEventListener||_e.on).call(_e,_11,function(_12){
|
|
var _13=document.createEvent("MessageEvent");
|
|
_13.initMessageEvent(_12.type,false,false,_12.data,_12.origin,_12.lastEventId,_12.source);
|
|
_d.dispatchEvent(_13);
|
|
},true);
|
|
};
|
|
};
|
|
_4.LongPoll=function(_14){
|
|
var _15=false,_16=true,_17,_18=[];
|
|
var _19={send:function(_1a){
|
|
var _1b=_1.delegate(_14);
|
|
_1b.rawBody=_1a;
|
|
clearTimeout(_17);
|
|
var _1c=_16?(_16=false)||_19.firstRequest(_1b):_19.transport(_1b);
|
|
_18.push(_1c);
|
|
_1c.then(function(_1d){
|
|
_19.readyState=1;
|
|
_18.splice(_1.indexOf(_18,_1c),1);
|
|
if(!_18.length){
|
|
_17=setTimeout(_23,_14.interval);
|
|
}
|
|
if(_1d){
|
|
_1f("message",{data:_1d},_1c);
|
|
}
|
|
},function(_1e){
|
|
_18.splice(_1.indexOf(_18,_1c),1);
|
|
if(!_15){
|
|
_1f("error",{error:_1e},_1c);
|
|
if(!_18.length){
|
|
_19.readyState=3;
|
|
_1f("close",{wasClean:false},_1c);
|
|
}
|
|
}
|
|
});
|
|
return _1c;
|
|
},close:function(){
|
|
_19.readyState=2;
|
|
_15=true;
|
|
for(var i=0;i<_18.length;i++){
|
|
_18[i].cancel();
|
|
}
|
|
_19.readyState=3;
|
|
_1f("close",{wasClean:true});
|
|
},transport:_14.transport||_1.xhrPost,args:_14,url:_14.url,readyState:0,CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3,dispatchEvent:function(_20){
|
|
_1f(_20.type,_20);
|
|
},on:_2.prototype.on,firstRequest:function(_21){
|
|
var _22=(_21.headers||(_21.headers={}));
|
|
_22.Pragma="start-long-poll";
|
|
try{
|
|
return this.transport(_21);
|
|
}
|
|
finally{
|
|
delete _22.Pragma;
|
|
}
|
|
}};
|
|
function _23(){
|
|
if(_19.readyState==0){
|
|
_1f("open",{});
|
|
}
|
|
if(!_18.length){
|
|
_19.send();
|
|
}
|
|
};
|
|
function _1f(_24,_25,_26){
|
|
if(_19["on"+_24]){
|
|
var _27=document.createEvent("HTMLEvents");
|
|
_27.initEvent(_24,false,false);
|
|
_1.mixin(_27,_25);
|
|
_27.ioArgs=_26&&_26.ioArgs;
|
|
_19["on"+_24](_27);
|
|
}
|
|
};
|
|
_19.connect=_19.on;
|
|
setTimeout(_23);
|
|
return _19;
|
|
};
|
|
return _4;
|
|
});
|