diff options
Diffstat (limited to 'js/dojo/dojox/cometd/callbackPollTransport.js')
| -rw-r--r-- | js/dojo/dojox/cometd/callbackPollTransport.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/js/dojo/dojox/cometd/callbackPollTransport.js b/js/dojo/dojox/cometd/callbackPollTransport.js new file mode 100644 index 0000000..25e7152 --- /dev/null +++ b/js/dojo/dojox/cometd/callbackPollTransport.js @@ -0,0 +1,107 @@ +//>>built +// wrapped by build app +define("dojox/cometd/callbackPollTransport", ["dijit","dojo","dojox","dojo/require!dojox/cometd/_base,dojox/cometd/longPollTransport,dojo/io/script"], function(dijit,dojo,dojox){ +dojo.provide("dojox.cometd.callbackPollTransport"); +dojo.require("dojox.cometd._base"); +dojo.require("dojox.cometd.longPollTransport"); +dojo.require("dojo.io.script"); + +dojox.cometd.callbackPollTransport = new function(){ + + this._connectionType = "callback-polling"; + this._cometd = null; + + this.check = function(types, version, xdomain){ + // we handle x-domain! + return (dojo.indexOf(types, "callback-polling") >= 0); + } + + this.tunnelInit = function(){ + var message = { + channel: "/meta/connect", + clientId: this._cometd.clientId, + connectionType: this._connectionType, + id: "" + this._cometd.messageId++ + }; + message = this._cometd._extendOut(message); + this.openTunnelWith([message]); + } + + this.tunnelCollapse = dojox.cometd.longPollTransport.tunnelCollapse; + this._connect = dojox.cometd.longPollTransport._connect; + this.deliver = dojox.cometd.longPollTransport.deliver; + + this.openTunnelWith = function(content, url){ + this._cometd._polling = true; + var script = { + load: dojo.hitch(this, function(data){ + this._cometd._polling=false; + this._cometd.deliver(data); + this._cometd._backon(); + this.tunnelCollapse(); + }), + error: dojo.hitch(this, function(err){ + this._cometd._polling = false; + this._cometd._publishMeta("connect",false); + this._cometd._backoff(); + this.tunnelCollapse(); + }), + url: (url || this._cometd.url), + content: { message: dojo.toJson(content) }, + callbackParamName: "jsonp" + }; + var connectTimeout = this._cometd._connectTimeout(); + if(connectTimeout > 0){ + script.timeout=connectTimeout; + } + dojo.io.script.get(script); + } + + this.sendMessages = function(/*array*/ messages){ + for(var i = 0; i < messages.length; i++){ + messages[i].clientId = this._cometd.clientId; + messages[i].id = ""+this._cometd.messageId++; + messages[i]=this._cometd._extendOut(messages[i]); + } + + var bindArgs = { + url: this._cometd.url || dojo.config["cometdRoot"], + load: dojo.hitch(this._cometd, "deliver"), + callbackParamName: "jsonp", + content: { message: dojo.toJson( messages ) }, + error: dojo.hitch(this, function(err){ + this._cometd._publishMeta("publish",false,{messages:messages}); + }), + timeout: this._cometd.expectedNetworkDelay + }; + return dojo.io.script.get(bindArgs); + } + + this.startup = function(handshakeData){ + if(this._cometd._connected){ return; } + this.tunnelInit(); + } + + // FIXME: what is this supposed to do? ;) + this.disconnect = dojox.cometd.longPollTransport.disconnect; + this.disconnect = function(){ + var message = { + channel: "/meta/disconnect", + clientId: this._cometd.clientId, + id: "" + this._cometd.messageId++ + }; + message = this._cometd._extendOut(message); + dojo.io.script.get({ + url: this._cometd.url || dojo.config["cometdRoot"], + callbackParamName: "jsonp", + content: { message: dojo.toJson([message]) } + }); + } + + this.cancelConnect = function(){} +} + +dojox.cometd.connectionTypes.register("callback-polling", dojox.cometd.callbackPollTransport.check, dojox.cometd.callbackPollTransport); + + +}); |
