dojox.cometd._deliver
dojo.require("dojox.cometd._base");
defined in dojox/cometd/_base.js
Usage
function (message) (view source)
message=this._extendIn(message); if(!message["channel"]){ if(message["success"] !== true){ console.debug("cometd error: no channel for message!", message); return; } } this.lastMessage = message; if(message.advice){ this._advice = message.advice; // TODO maybe merge? } // check to see if we got a /meta channel message that we care about var deferred=null; if( (message["channel"]) && (message.channel.length > 5)&& (message.channel.substr(0, 5) == "/meta")){ // check for various meta topic actions that we need to respond to switch(message.channel){ case "/meta/connect": if(message.successful && !this._connected){ this._connected = this._initialized; this.endBatch(); }else if(!this._initialized){ this._connected = false; // finish disconnect } dojo.publish("/cometd/meta",[{cometd:this,action:"connect",successful:message.successful,state:this.state()}]); break; case "/meta/subscribe": deferred = this._deferredSubscribes[message.subscription]; if(!message.successful){ if(deferred){ deferred.errback(new Error(message.error)); } this.currentTransport.cancelConnect(); return; } dojox.cometd.subscribed(message.subscription, message); if(deferred){ deferred.callback(true); } break; case "/meta/unsubscribe": deferred = this._deferredUnsubscribes[message.subscription]; if(!message.successful){ if(deferred){ deferred.errback(new Error(message.error)); } this.currentTransport.cancelConnect(); return; } this.unsubscribed(message.subscription, message); if(deferred){ deferred.callback(true); } break; default: if(message.successful && !message.successful){ this.currentTransport.cancelConnect(); return; } } } // send the message down for processing by the transport this.currentTransport.deliver(message); if(message.data){ // dispatch the message to any locally subscribed listeners try { var messages=[message]; // Determine target topic var tname="/cometd"+message.channel; // Deliver to globs that apply to target topic var tnameParts=message.channel.split("/"); var tnameGlob="/cometd"; for (var i=1;i<tnameParts.length-1;i++) { dojo.publish(tnameGlob+"/**",messages); tnameGlob+="/"+tnameParts[i]; } dojo.publish(tnameGlob+"/**",messages); dojo.publish(tnameGlob+"/*",messages); // deliver to target topic dojo.publish(tname,messages); }catch(e){ console.debug(e); } }
parameter | type | description |
---|---|---|
message |