summaryrefslogtreecommitdiff
path: root/includes/js/dojox/cometd/timesync.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/cometd/timesync.js')
-rw-r--r--includes/js/dojox/cometd/timesync.js126
1 files changed, 0 insertions, 126 deletions
diff --git a/includes/js/dojox/cometd/timesync.js b/includes/js/dojox/cometd/timesync.js
deleted file mode 100644
index 44ef241..0000000
--- a/includes/js/dojox/cometd/timesync.js
+++ /dev/null
@@ -1,126 +0,0 @@
-if(!dojo._hasResource["dojox.cometd.timesync"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojox.cometd.timesync"] = true;
-dojo.provide("dojox.cometd.timesync");
-dojo.require("dojox.cometd");
-
-/**
- * this file provides the time synchronization extension to cometd.
- * Timesync allows the client and server to exchange time information on every
- * handshake and connect message so that the client may calculate an approximate
- * offset from it's own clock epoch to that of the server.
- *
- * With each handshake or connect, the extension sends timestamps within the
- * ext field like: {ext:{timesync:{tc:12345567890},...},...}
- * where ts is the timestamp in ms since 1970 of when the message was sent.
- *
- * A cometd server that supports timesync, should respond with and ext field
- * like: {ext:{timesync:{tc:12345567890,ts:1234567900,p:123},...},...}
- * where ts is the timestamp sent by the client, te is the timestamp on the server
- * of when the message was received and p is the poll duration in ms - ie the
- * time the server took before sending the response.
- *
- * On receipt of the response, the client is able to use current time to determine
- * the total trip time, from which p is subtracted to determine an approximate
- * two way network traversal time. The assumption is made that the network is
- * symmetric for traversal time, so the offset between the two clocks is
- * ts-tc-(now-tc-p)/2. In practise networks (and the cometd client/server software)
- * is never perfectly symmetric, so accuracy is limited by the difference, which
- * can be 10s of milliseconds.
- *
- * In order to smooth over any transient fluctuations, the extension keeps a sliding
- * average of the offsets received. By default this is over 10 messages, but this can
- * be changed with the dojox.cometd.timesync._window element.
- */
-dojox.cometd.timesync= new function(){
-
- this._window=10;// The window size for the sliding average of offset samples.
- this._minWindow=4;// The window size for the sliding average of offset samples.
- this._offsets=new Array(); // The samples used to calculate the average offset.
- this.offset=0; // The offset in ms between the clients clock and the servers clock. Add this to the local
- // time epoch to obtain server time.
- this.samples=0; // The number of samples used to calculate the offset. If 0, the offset is not valid.
-
- this.getServerTime=function(){ // return: long
- // Summary:
- // Calculate the current time on the server
- //
- return new Date().getTime()+this.offset;
- }
-
- this.getServerDate=function(){ // return: Date
- // Summary:
- // Calculate the current time on the server
- //
- return new Date(this.getServerTime());
- }
-
- this.setTimeout=function(/*function*/call,/*long|Date*/atTimeOrDate){
- // Summary:
- // Set a timeout function relative to server time
- // call:
- // the function to call when the timeout occurs
- // atTimeOrTime:
- // a long timestamp or a Date representing the server time at
- // which the timeout should occur.
-
- var ts=(atTimeOrDate instanceof Date)?atTimeOrDate.getTime():(0+atTimeOrDate);
- var tc=ts-this.offset;
- var interval=tc-new Date().getTime();
- if (interval<=0)
- interval=1;
- return setTimeout(call,interval);
- }
-
- this._in=function(/*Object*/msg){
- // Summary:
- // Handle incoming messages for the timesync extension.
- // description:
- // Look for ext:{timesync:{}} field and calculate offset if present.
- // msg:
- // The incoming bayeux message
-
- var channel=msg.channel;
- if (channel && channel.indexOf('/meta/')==0){
- if (msg.ext && msg.ext.timesync){
- var sync=msg.ext.timesync;
- var now=new Date().getTime();
-
- this._offsets.push(sync.ts-sync.tc-(now-sync.tc-sync.p)/2);
- if (this._offsets.length>this._window)
- this._offsets.shift();
- this.samples++;
- var total=0;
- for (var i in this._offsets)
- total+=this._offsets[i];
- this.offset=parseInt((total/this._offsets.length).toFixed());
-
- if (this.samples<this._minWindow)
- setTimeout(dojox._scopeName + ".cometd.publish('/meta/ping',null)",100);
- }
- }
- return msg;
- }
-
- this._out=function(msg){
- // Summary:
- // Handle outgoing messages for the timesync extension.
- // description:
- // Look for handshake and connect messages and add the ext:{timesync:{}} fields
- // msg:
- // The outgoing bayeux message
-
- var channel=msg.channel;
- if (channel && channel.indexOf('/meta/')==0){
- var now=new Date().getTime();
- if (!msg.ext)
- msg.ext={};
- msg.ext.timesync={tc: now};
- }
- return msg;
- }
-};
-
-dojox.cometd._extendInList.push(dojo.hitch(dojox.cometd.timesync,"_in"));
-dojox.cometd._extendOutList.push(dojo.hitch(dojox.cometd.timesync,"_out"));
-
-}