timesync.js 1.6 KB

12345678
  1. /*
  2. Copyright (c) 2004-2009, 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. if(!dojo._hasResource["dojox.cometd.timesync"]){dojo._hasResource["dojox.cometd.timesync"]=true;dojo.provide("dojox.cometd.timesync");dojo.require("dojox.cometd._base");dojox.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(_1,_2){var ts=(_2 instanceof Date)?_2.getTime():(0+_2);var tc=ts-this.offset;var _3=tc-new Date().getTime();if(_3<=0){_3=1;}return setTimeout(_1,_3);};this._in=function(_4){var _5=_4.channel;if(_5&&_5.indexOf("/meta/")==0){if(_4.ext&&_4.ext.timesync){var _6=_4.ext.timesync;var _7=new Date().getTime();var l=(_7-_6.tc-_6.p)/2-_6.a;var o=_6.ts-_6.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 _4;};this._out=function(_8){var _9=_8.channel;if(_9&&_9.indexOf("/meta/")==0){var _a=new Date().getTime();if(!_8.ext){_8.ext={};}_8.ext.timesync={tc:_a,l:this.lag,o:this.offset};}return _8;};};dojox.cometd._extendInList.push(dojo.hitch(dojox.cometd.timesync,"_in"));dojox.cometd._extendOutList.push(dojo.hitch(dojox.cometd.timesync,"_out"));}