root / trunk / web / dojo / dojox / cometd / timesync.js @ 10
History | View | Annotate | Download (1.7 KB)
1 |
/*
|
---|---|
2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
4 |
see: http://dojotoolkit.org/license for details
|
5 |
*/
|
6 |
|
7 |
|
8 |
if(!dojo._hasResource["dojox.cometd.timesync"]){ |
9 |
dojo._hasResource["dojox.cometd.timesync"]=true; |
10 |
dojo.provide("dojox.cometd.timesync");
|
11 |
dojo.require("dojox.cometd._base");
|
12 |
dojox.cometd.timesync=new function(){ |
13 |
this._window=10; |
14 |
this._lags=[];
|
15 |
this._offsets=[];
|
16 |
this.lag=0; |
17 |
this.offset=0; |
18 |
this.samples=0; |
19 |
this.getServerTime=function(){ |
20 |
return new Date().getTime()+this.offset; |
21 |
}; |
22 |
this.getServerDate=function(){ |
23 |
return new Date(this.getServerTime()); |
24 |
}; |
25 |
this.setTimeout=function(_1,_2){ |
26 |
var ts=(_2 instanceof Date)?_2.getTime():(0+_2); |
27 |
var tc=ts-this.offset; |
28 |
var _3=tc-new Date().getTime(); |
29 |
if(_3<=0){ |
30 |
_3=1;
|
31 |
} |
32 |
return setTimeout(_1,_3);
|
33 |
}; |
34 |
this._in=function(_4){ |
35 |
var _5=_4.channel;
|
36 |
if(_5&&_5.indexOf("/meta/")==0){ |
37 |
if(_4.ext&&_4.ext.timesync){
|
38 |
var _6=_4.ext.timesync;
|
39 |
var _7=new Date().getTime(); |
40 |
var l=(_7-_6.tc-_6.p)/2-_6.a; |
41 |
var o=_6.ts-_6.tc-l;
|
42 |
this._lags.push(l);
|
43 |
this._offsets.push(o);
|
44 |
if(this._offsets.length>this._window){ |
45 |
this._offsets.shift();
|
46 |
this._lags.shift();
|
47 |
} |
48 |
this.samples++;
|
49 |
l=0;
|
50 |
o=0;
|
51 |
for(var i in this._offsets){ |
52 |
l+=this._lags[i];
|
53 |
o+=this._offsets[i];
|
54 |
} |
55 |
this.offset=parseInt((o/this._offsets.length).toFixed()); |
56 |
this.lag=parseInt((l/this._lags.length).toFixed()); |
57 |
} |
58 |
} |
59 |
return _4;
|
60 |
}; |
61 |
this._out=function(_8){ |
62 |
var _9=_8.channel;
|
63 |
if(_9&&_9.indexOf("/meta/")==0){ |
64 |
var _a=new Date().getTime(); |
65 |
if(!_8.ext){
|
66 |
_8.ext={}; |
67 |
} |
68 |
_8.ext.timesync={tc:_a,l:this.lag,o:this.offset}; |
69 |
} |
70 |
return _8;
|
71 |
}; |
72 |
}; |
73 |
dojox.cometd._extendInList.push(dojo.hitch(dojox.cometd.timesync,"_in"));
|
74 |
dojox.cometd._extendOutList.push(dojo.hitch(dojox.cometd.timesync,"_out"));
|
75 |
} |