root / trunk / web / dojo / dojox / cometd / timesync.js
History | View | Annotate | Download (1.7 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
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 | } |