diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/cometd/longPollTransportFormEncoded.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/cometd/longPollTransportFormEncoded.js | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/cometd/longPollTransportFormEncoded.js b/js/dojo-1.7.2/dojox/cometd/longPollTransportFormEncoded.js new file mode 100644 index 0000000..bdad3c9 --- /dev/null +++ b/js/dojo-1.7.2/dojox/cometd/longPollTransportFormEncoded.js @@ -0,0 +1,162 @@ +//>>built +// wrapped by build app +define("dojox/cometd/longPollTransportFormEncoded", ["dijit","dojo","dojox","dojo/require!dojox/cometd/_base"], function(dijit,dojo,dojox){ +dojo.provide("dojox.cometd.longPollTransportFormEncoded"); +dojo.require("dojox.cometd._base"); + +dojox.cometd.longPollTransportFormEncoded = new function(){ + // This is an alternative implementation to that provided in logPollTransport.js that + // form encodes all messages instead of sending them as text/json + + this._connectionType = "long-polling"; + this._cometd = null; + + this.check = function(types, version, xdomain){ + return ((!xdomain)&&(dojo.indexOf(types, "long-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: dojo.toJson([message]) }); + } + + this.tunnelCollapse = function(){ + // TODO handle transport specific advice + + if(!this._cometd._initialized){ return; } + if(this._cometd._advice && this._cometd._advice["reconnect"]=="none"){ + return; + } + var interval = this._cometd._interval(); + if (this._cometd._status=="connected") { + setTimeout(dojo.hitch(this, "_connect"), interval); + }else{ + setTimeout(dojo.hitch(this._cometd, function(){ + this.init(this.url, this._props); + }), interval); + } + } + + this._connect = function(){ + if(!this._cometd._initialized){ return; } + if(this._cometd._polling) { return; } + + if((this._cometd._advice) && (this._cometd._advice["reconnect"]=="handshake")){ + this._cometd._status="unconnected"; //? + this._initialized = false; + this._cometd.init(this._cometd.url, this._cometd._props); + }else if(this._cometd._status=="connected"){ + var message = { + channel: "/meta/connect", + connectionType: this._connectionType, + clientId: this._cometd.clientId, + id: "" + this._cometd.messageId++ + }; + if(this._cometd.connectTimeout>=this._cometd.expectedNetworkDelay){ + message.advice = { + timeout: this._cometd.connectTimeout - this._cometd.expectedNetworkDelay + }; + } + message = this._cometd._extendOut(message); + this.openTunnelWith({ message: dojo.toJson([message]) }); + } + } + + this.deliver = function(message){ + // Nothing to do + } + + this.openTunnelWith = function(content, url){ + this._cometd._polling = true; + var post = { + url: (url||this._cometd.url), + content: content, + handleAs: this._cometd.handleAs, + 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){ + var metaMsg = { + failure: true, + error: err, + advice: this._cometd._advice + }; + this._cometd._polling=false; + this._cometd._publishMeta("connect",false, metaMsg); + this._cometd._backoff(); + this.tunnelCollapse(); + }) + }; + + var connectTimeout = this._cometd._connectTimeout(); + if(connectTimeout > 0){ + post.timeout = connectTimeout; + } + + this._poll = dojo.xhrPost(post); + } + + this.sendMessages = function(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]); + } + return dojo.xhrPost({ + url: this._cometd.url||dojo.config["cometdRoot"], + handleAs: this._cometd.handleAs, + load: dojo.hitch(this._cometd, "deliver"), + content: { message: dojo.toJson(messages) }, + error: dojo.hitch(this, function(err){ + this._cometd._publishMeta("publish",false,{messages:messages}); + }), + timeout: this._cometd.expectedNetworkDelay + }); + } + + this.startup = function(handshakeData){ + if(this._cometd._status=="connected"){ return; } + this.tunnelInit(); + } + + this.disconnect = function(){ + var message = { + channel: "/meta/disconnect", + clientId: this._cometd.clientId, + id: "" + this._cometd.messageId++ + }; + message = this._cometd._extendOut(message); + dojo.xhrPost({ + url: this._cometd.url || dojo.config["cometdRoot"], + handleAs: this._cometd.handleAs, + content: { message: dojo.toJson([message]) } + }); + } + + this.cancelConnect = function(){ + if(this._poll){ + this._poll.cancel(); + this._cometd._polling=false; + this._cometd._publishMeta("connect",false,{cancel:true}); + this._cometd._backoff(); + this.disconnect(); + this.tunnelCollapse(); + } + } +} + +dojox.cometd.longPollTransport = dojox.cometd.longPollTransportFormEncoded; + +dojox.cometd.connectionTypes.register("long-polling", dojox.cometd.longPollTransport.check, dojox.cometd.longPollTransportFormEncoded); +dojox.cometd.connectionTypes.register("long-polling-form-encoded", dojox.cometd.longPollTransport.check, dojox.cometd.longPollTransportFormEncoded); + +}); |
