root / trunk / web / dojo / dojox / xmpp / bosh.js @ 12
History | View | Annotate | Download (3.44 KB)
| 1 | 9 | andrej.cim | /*
|
|---|---|---|---|
| 2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
| 3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
| 4 | see: http://dojotoolkit.org/license for details
|
||
| 5 | */
|
||
| 6 | |||
| 7 | |||
| 8 | if(!dojo._hasResource["dojox.xmpp.bosh"]){ |
||
| 9 | dojo._hasResource["dojox.xmpp.bosh"]=true; |
||
| 10 | dojo.provide("dojox.xmpp.bosh");
|
||
| 11 | dojo.require("dojo.io.script");
|
||
| 12 | dojo.require("dojo.io.iframe");
|
||
| 13 | dojo.require("dojox.xml.parser");
|
||
| 14 | dojox.xmpp.bosh={transportIframes:[],initialize:function(_1){
|
||
| 15 | this.transportIframes=[];
|
||
| 16 | var _2=dojox._scopeName+".xmpp.bosh"; |
||
| 17 | var c=dojo.connect(dojo.getObject(_2),"_iframeOnload",this,function(_3){ |
||
| 18 | if(_3==0){ |
||
| 19 | _1.load(); |
||
| 20 | dojo.disconnect(c); |
||
| 21 | } |
||
| 22 | }); |
||
| 23 | for(var i=0;i<_1.iframes;i++){ |
||
| 24 | var _4="xmpp-transport-"+i; |
||
| 25 | var _5=dojo.byId("xmpp-transport-"+i); |
||
| 26 | if(_5){
|
||
| 27 | if(window[_4]){
|
||
| 28 | window[_4]=null;
|
||
| 29 | } |
||
| 30 | if(window.frames[_4]){
|
||
| 31 | window.frames[_4]=null;
|
||
| 32 | } |
||
| 33 | dojo.destroy(_5); |
||
| 34 | } |
||
| 35 | _5=dojo.io.iframe.create("xmpp-transport-"+i,_2+"._iframeOnload("+i+");"); |
||
| 36 | this.transportIframes.push(_5);
|
||
| 37 | } |
||
| 38 | },_iframeOnload:function(_6){ |
||
| 39 | var _7=dojo.io.iframe.doc(dojo.byId("xmpp-transport-"+_6)); |
||
| 40 | _7.write("<script>var isLoaded=true; var rid=0; var transmiting=false; function _BOSH_(msg) { transmiting=false; parent.dojox.xmpp.bosh.handle(msg, rid); } </script>");
|
||
| 41 | },findOpenIframe:function(){ |
||
| 42 | for(var i=0;i<this.transportIframes.length;i++){ |
||
| 43 | var _8=this.transportIframes[i]; |
||
| 44 | var _9=_8.contentWindow;
|
||
| 45 | if(_9.isLoaded&&!_9.transmiting){
|
||
| 46 | return _8;
|
||
| 47 | } |
||
| 48 | } |
||
| 49 | return false; |
||
| 50 | },handle:function(_a,_b){ |
||
| 51 | var _c=this["rid"+_b]; |
||
| 52 | var _d=dojox.xml.parser.parse(_a,"text/xml"); |
||
| 53 | if(_d){
|
||
| 54 | _c.ioArgs.xmppMessage=_d; |
||
| 55 | }else{
|
||
| 56 | _c.errback(new Error("Recieved bad document from server: "+_a)); |
||
| 57 | } |
||
| 58 | },get:function(_e){ |
||
| 59 | var _f=this.findOpenIframe(); |
||
| 60 | var _10=dojo.io.iframe.doc(_f);
|
||
| 61 | _e.frameDoc=_10; |
||
| 62 | var dfd=this._makeScriptDeferred(_e); |
||
| 63 | var _11=dfd.ioArgs;
|
||
| 64 | _f.contentWindow.rid=_11.rid; |
||
| 65 | _f.contentWindow.transmiting=true;
|
||
| 66 | dojo._ioAddQueryToUrl(_11); |
||
| 67 | dojo._ioNotifyStart(dfd); |
||
| 68 | dojo.io.script.attach(_11.id,_11.url,_10); |
||
| 69 | dojo._ioWatch(dfd,this._validCheck,this._ioCheck,this._resHandle); |
||
| 70 | return dfd;
|
||
| 71 | },remove:function(id,_12){ |
||
| 72 | dojo.destroy(dojo.byId(id,_12)); |
||
| 73 | if(this[id]){ |
||
| 74 | delete this[id]; |
||
| 75 | } |
||
| 76 | },_makeScriptDeferred:function(_13){ |
||
| 77 | var dfd=dojo._ioSetArgs(_13,this._deferredCancel,this._deferredOk,this._deferredError); |
||
| 78 | var _14=dfd.ioArgs;
|
||
| 79 | _14.id="rid"+_13.rid;
|
||
| 80 | _14.rid=_13.rid; |
||
| 81 | _14.canDelete=true;
|
||
| 82 | _14.frameDoc=_13.frameDoc; |
||
| 83 | this[_14.id]=dfd;
|
||
| 84 | return dfd;
|
||
| 85 | },_deferredCancel:function(dfd){ |
||
| 86 | dfd.canceled=true;
|
||
| 87 | if(dfd.ioArgs.canDelete){
|
||
| 88 | dojox.xmpp.bosh._addDeadScript(dfd.ioArgs); |
||
| 89 | } |
||
| 90 | },_deferredOk:function(dfd){ |
||
| 91 | var _15=dfd.ioArgs;
|
||
| 92 | if(_15.canDelete){
|
||
| 93 | dojox.xmpp.bosh._addDeadScript(_15); |
||
| 94 | } |
||
| 95 | return _15.xmppMessage||_15;
|
||
| 96 | },_deferredError:function(_16,dfd){ |
||
| 97 | if(dfd.ioArgs.canDelete){
|
||
| 98 | if(_16.dojoType=="timeout"){ |
||
| 99 | dojox.xmpp.bosh.remove(dfd.ioArgs.id,dfd.ioArgs.frameDoc); |
||
| 100 | }else{
|
||
| 101 | dojox.xmpp.bosh._addDeadScript(dfd.ioArgs); |
||
| 102 | } |
||
| 103 | } |
||
| 104 | return _16;
|
||
| 105 | },_deadScripts:[],_addDeadScript:function(_17){ |
||
| 106 | dojox.xmpp.bosh._deadScripts.push({id:_17.id,frameDoc:_17.frameDoc});
|
||
| 107 | _17.frameDoc=null;
|
||
| 108 | },_validCheck:function(dfd){ |
||
| 109 | var _18=dojox.xmpp.bosh;
|
||
| 110 | var _19=_18._deadScripts;
|
||
| 111 | if(_19&&_19.length>0){ |
||
| 112 | for(var i=0;i<_19.length;i++){ |
||
| 113 | _18.remove(_19[i].id,_19[i].frameDoc); |
||
| 114 | _19[i].frameDoc=null;
|
||
| 115 | } |
||
| 116 | dojox.xmpp.bosh._deadScripts=[]; |
||
| 117 | } |
||
| 118 | return true; |
||
| 119 | },_ioCheck:function(dfd){ |
||
| 120 | var _1a=dfd.ioArgs;
|
||
| 121 | if(_1a.xmppMessage){
|
||
| 122 | return true; |
||
| 123 | } |
||
| 124 | return false; |
||
| 125 | },_resHandle:function(dfd){ |
||
| 126 | if(dojox.xmpp.bosh._ioCheck(dfd)){
|
||
| 127 | dfd.callback(dfd); |
||
| 128 | }else{
|
||
| 129 | dfd.errback(new Error("inconceivable dojox.xmpp.bosh._resHandle error")); |
||
| 130 | } |
||
| 131 | }}; |
||
| 132 | } |