dojo.provide("dojox.cometd.longPollTransportJsonEncoded"); dojo.require("dojox.cometd._base"); dojox.cometd.longPollTransportJsonEncoded = new function(){ // This is an alternative implementation to that provided in logPollTransportFormEncoded.js // that sends messages as text/json rather than form encoding them. 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]); } this.tunnelCollapse = function(){ // TODO handle transport specific advice if(!this._cometd._initialized){ return; } if(this._cometd._advice && this._cometd._advice["reconnect"]=="none"){ return; } if (this._cometd._status=="connected") { setTimeout(dojo.hitch(this,function(){this._connect();}),this._cometd._interval()); }else{ setTimeout(dojo.hitch(this._cometd,function(){this.init(this.url,this._props);}),this._cometd._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]); } } this.deliver = function(message){ // Nothing to do } this.openTunnelWith = function(messages, url){ this._cometd._polling = true; var post = { url: (url||this._cometd.url), postData: dojo.toJson(messages), contentType: "text/json;charset=UTF-8", 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){ this._cometd._polling=false; var metaMsg = { failure: true, error: err, advice: this._cometd._advice }; 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.rawXhrPost(post); } this.sendMessages = function(messages){ for(var i=0; i