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