69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
//>>built
|
|
define(["dijit","dojo","dojox","dojo/require!dojox/cometd/_base"],function(_1,_2,_3){
|
|
_2.provide("dojox.cometd.timesync");
|
|
_2.require("dojox.cometd._base");
|
|
_3.cometd.timesync=new function(){
|
|
this._window=10;
|
|
this._lags=[];
|
|
this._offsets=[];
|
|
this.lag=0;
|
|
this.offset=0;
|
|
this.samples=0;
|
|
this.getServerTime=function(){
|
|
return new Date().getTime()+this.offset;
|
|
};
|
|
this.getServerDate=function(){
|
|
return new Date(this.getServerTime());
|
|
};
|
|
this.setTimeout=function(_4,_5){
|
|
var ts=(_5 instanceof Date)?_5.getTime():(0+_5);
|
|
var tc=ts-this.offset;
|
|
var _6=tc-new Date().getTime();
|
|
if(_6<=0){
|
|
_6=1;
|
|
}
|
|
return setTimeout(_4,_6);
|
|
};
|
|
this._in=function(_7){
|
|
var _8=_7.channel;
|
|
if(_8&&_8.indexOf("/meta/")==0){
|
|
if(_7.ext&&_7.ext.timesync){
|
|
var _9=_7.ext.timesync;
|
|
var _a=new Date().getTime();
|
|
var l=(_a-_9.tc-_9.p)/2-_9.a;
|
|
var o=_9.ts-_9.tc-l;
|
|
this._lags.push(l);
|
|
this._offsets.push(o);
|
|
if(this._offsets.length>this._window){
|
|
this._offsets.shift();
|
|
this._lags.shift();
|
|
}
|
|
this.samples++;
|
|
l=0;
|
|
o=0;
|
|
for(var i in this._offsets){
|
|
l+=this._lags[i];
|
|
o+=this._offsets[i];
|
|
}
|
|
this.offset=parseInt((o/this._offsets.length).toFixed());
|
|
this.lag=parseInt((l/this._lags.length).toFixed());
|
|
}
|
|
}
|
|
return _7;
|
|
};
|
|
this._out=function(_b){
|
|
var _c=_b.channel;
|
|
if(_c&&_c.indexOf("/meta/")==0){
|
|
var _d=new Date().getTime();
|
|
if(!_b.ext){
|
|
_b.ext={};
|
|
}
|
|
_b.ext.timesync={tc:_d,l:this.lag,o:this.offset};
|
|
}
|
|
return _b;
|
|
};
|
|
};
|
|
_3.cometd._extendInList.push(_2.hitch(_3.cometd.timesync,"_in"));
|
|
_3.cometd._extendOutList.push(_2.hitch(_3.cometd.timesync,"_out"));
|
|
});
|