Project

General

Profile

Statistics
| Revision:

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
}