summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/cometd/longPollTransportFormEncoded.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.7.2/dojox/cometd/longPollTransportFormEncoded.js')
-rw-r--r--js/dojo-1.7.2/dojox/cometd/longPollTransportFormEncoded.js162
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);
+
+});