/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml */ dojo.require("dojo.event.*"); dojo.require("dojo.io.BrowserIO"); dojo.provide("dojo.io.RepubsubIO"); dojo.io.repubsubTranport=new function(){ var _1=dojo.io.repubsub; this.canHandle=function(_2){ if((_2["mimetype"]=="text/javascript")&&(_2["method"]=="repubsub")){ return true; } return false; }; this.bind=function(_3){ if(!_1.isInitialized){ _1.init(); } if(!_1.topics[_3.url]){ _3.rpsLoad=function(_4){ _3.load("load",_4); }; _1.subscribe(_3.url,_3,"rpsLoad"); } if(_3["content"]){ var _5=dojo.io.repubsubEvent.initFromProperties(_3.content); _1.publish(_3.url,_5); } }; dojo.io.transports.addTransport("repubsubTranport"); }; dojo.io.repubsub=new function(){ this.initDoc="init.html"; this.isInitialized=false; this.subscriptionBacklog=[]; this.debug=true; this.rcvNodeName=null; this.sndNodeName=null; this.rcvNode=null; this.sndNode=null; this.canRcv=false; this.canSnd=false; this.canLog=false; this.sndTimer=null; this.windowRef=window; this.backlog=[]; this.tunnelInitCount=0; this.tunnelFrameKey="tunnel_frame"; this.serverBaseURL=location.protocol+"//"+location.host+location.pathname; this.logBacklog=[]; this.getRandStr=function(){ return Math.random().toString().substring(2,10); }; this.userid="guest"; this.tunnelID=this.getRandStr(); this.attachPathList=[]; this.topics=[]; this.parseGetStr=function(){ var _6=document.location.toString(); var _7=_6.split("?",2); if(_7.length>1){ var _8=_7[1]; var _9=_8.split("&"); var _a=[]; for(var x in _9){ var sp=_9[x].split("="); try{ _a[sp[0]]=eval(sp[1]); } catch(e){ _a[sp[0]]=sp[1]; } } return _a; }else{ return []; } }; var _d=this.parseGetStr(); for(var x in _d){ this[x]=_d[x]; } if(!this["tunnelURI"]){ this.tunnelURI=["/who/",escape(this.userid),"/s/",this.getRandStr(),"/kn_journal"].join(""); } if(window["repubsubOpts"]||window["rpsOpts"]){ var _f=window["repubsubOpts"]||window["rpsOpts"]; for(var x in _f){ this[x]=_f[x]; } } this.tunnelCloseCallback=function(){ dojo.io.setIFrameSrc(this.rcvNode,this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain); }; this.receiveEventFromTunnel=function(evt,_11){ if(!evt["elements"]){ this.log("bailing! event received without elements!","error"); return; } var e={}; for(var i=0;i0){ if(!this.canLog){ break; } var blo=this.logBacklog.shift(); this.writeLog("["+blo[0]+"]: "+blo[1],blo[2]); } this.writeLog(str,lvl); }; this.writeLog=function(str,lvl){ dojo.debug(((new Date()).toLocaleTimeString())+": "+str); }; this.init=function(){ this.widenDomain(); this.openTunnel(); this.isInitialized=true; while(this.subscriptionBacklog.length){ this.subscribe.apply(this,this.subscriptionBacklog.shift()); } }; this.clobber=function(){ if(this.rcvNode){ this.setCookie([[this.tunnelFrameKey,"closed"],["path","/"]],false); } }; this.openTunnel=function(){ this.rcvNodeName="rcvIFrame_"+this.getRandStr(); this.setCookie([[this.tunnelFrameKey,this.rcvNodeName],["path","/"]],false); this.rcvNode=dojo.io.createIFrame(this.rcvNodeName); dojo.io.setIFrameSrc(this.rcvNode,this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain); this.sndNodeName="sndIFrame_"+this.getRandStr(); this.sndNode=dojo.io.createIFrame(this.sndNodeName); dojo.io.setIFrameSrc(this.sndNode,this.initDoc+"?callback=repubsub.sndNodeReady&domain="+document.domain); }; this.rcvNodeReady=function(){ var _24=[this.tunnelURI,"/kn_status/",this.getRandStr(),"_",String(this.tunnelInitCount++)].join(""); this.log("rcvNodeReady"); var _25=[this.serverBaseURL,"/kn?kn_from=",escape(this.tunnelURI),"&kn_id=",escape(this.tunnelID),"&kn_status_from=",escape(_24)]; dojo.io.setIFrameSrc(this.rcvNode,_25.join("")); this.subscribe(_24,this,"statusListener",true); this.log(_25.join("")); }; this.sndNodeReady=function(){ this.canSnd=true; this.log("sndNodeReady"); this.log(this.backlog.length); if(this.backlog.length>0){ this.dequeueEvent(); } }; this.statusListener=function(evt){ this.log("status listener called"); this.log(evt.status,"info"); }; this.dispatch=function(evt){ if(evt["to"]||evt["kn_routed_from"]){ var rf=evt["to"]||evt["kn_routed_from"]; var _29=rf.split(this.serverBaseURL,2)[1]; if(!_29){ _29=rf; } this.log("[topic] "+_29); if(_29.length>3){ if(_29.slice(0,3)=="/kn"){ _29=_29.slice(3); } } if(this.attachPathList[_29]){ this.attachPathList[_29](evt); } } }; this.subscribe=function(_2a,_2b,_2c,_2d){ if(!this.isInitialized){ this.subscriptionBacklog.push([_2a,_2b,_2c,_2d]); return; } if(!this.attachPathList[_2a]){ this.attachPathList[_2a]=function(){ return true; }; this.log("subscribing to: "+_2a); this.topics.push(_2a); } var _2e=new dojo.io.repubsubEvent(this.tunnelURI,_2a,"route"); var _2f=[this.serverBaseURL+"/kn",_2e.toGetString()].join(""); dojo.event.kwConnect({once:true,srcObj:this.attachPathList,srcFunc:_2a,adviceObj:_2b,adviceFunc:_2c}); if(!this.rcvNode){ } if(_2d){ return; } this.log("sending subscription to: "+_2a); this.sendTopicSubToServer(_2a,_2f); }; this.sendTopicSubToServer=function(_30,str){ if(!this.attachPathList[_30]["subscriptions"]){ this.enqueueEventStr(str); this.attachPathList[_30].subscriptions=0; } this.attachPathList[_30].subscriptions++; }; this.unSubscribe=function(_32,_33,_34){ dojo.event.kwDisconnect({srcObj:this.attachPathList,srcFunc:_32,adviceObj:_33,adviceFunc:_34}); }; this.publish=function(_35,_36){ var evt=dojo.io.repubsubEvent.initFromProperties(_36); evt.to=_35; var _38=[]; _38.push(this.serverBaseURL+"/kn"); _38.push(evt.toGetString()); this.enqueueEventStr(_38.join("")); }; this.enqueueEventStr=function(_39){ this.log("enqueueEventStr"); this.backlog.push(_39); this.dequeueEvent(); }; this.dequeueEvent=function(_3a){ this.log("dequeueEvent"); if(this.backlog.length<=0){ return; } if((this.canSnd)||(_3a)){ dojo.io.setIFrameSrc(this.sndNode,this.backlog.shift()+"&callback=repubsub.sndNodeReady"); this.canSnd=false; }else{ this.log("sndNode not available yet!","debug"); } }; }; dojo.io.repubsubEvent=function(to,_3c,_3d,id,_3f,_40,_41,uid){ this.to=to; this.from=_3c; this.method=_3d||"route"; this.id=id||repubsub.getRandStr(); this.uri=_3f; this.displayname=_41||repubsub.displayname; this.userid=uid||repubsub.userid; this.payload=_40||""; this.flushChars=4096; this.initFromProperties=function(evt){ if(evt.constructor=dojo.io.repubsubEvent){ for(var x in evt){ this[x]=evt[x]; } }else{ for(var x in evt){ if(typeof this.forwardPropertiesMap[x]=="string"){ this[this.forwardPropertiesMap[x]]=evt[x]; }else{ this[x]=evt[x]; } } } }; this.toGetString=function(_45){ var qs=[((_45)?"":"?")]; for(var x=0;x