5 this.comms = new Array;
15 sleep: function(delay) {
18 this.sleep_hdl = setTimeout(function(obj){ if (obj.st_loc_new > obj.st_loc) { obj.st_loc++; obj.sleep_hdl = null; }},
23 if (this.sleep_hdl != null) {
24 clearTimeout(this.sleep_hdl);
25 this.sleep_hdl = null;
30 function http_streaming(win, gst, sess, cons)
35 this.doc = win.document;
36 this.keepalive_old = -1;
37 this.keepalive_new = -1;
39 this.cmdproc = function(com){eval(com);}
42 http_streaming.prototype = {
54 watchdog_timeout: 100,
61 comm_match: /_*@BEGIN@(.*?)@END@/g,
62 comm_clean: /_*@BEGIN@(.*?)@END@/,
69 start: function(page) {
70 this.log("http_streaming:start restart: "+this.restart_n);
71 this.keepalives_equal = 0;
72 this.ifra = this.doc.createElement("iframe");
73 this.ifra.style.visibility = "hidden";
74 this.doc.body.appendChild(this.ifra);
77 this.page = url_append_args(this.page, "sess", this.sess, "st", gst.st);
79 this.ifra.contentWindow.location.href = this.page;
81 this.watchdog_hdl = setTimeout(function(obj) { obj.log("tout1"); obj.watchdog(); }, this.watchdog_timeout, this);
84 watchdog: function () {
86 var comm_newpart, comm_len, comm_arr;
88 // WATCHDOGING THE CONNECTION
89 if ( (this.watchdog_ct % this.watchdog_checktm) == 0 || !this.watchable) {
90 this.log("hs::watchdog: start, cur equal times: "+this.keepalives_equal);
91 if (!this.watchable) {
93 if (typeof(this.ifra.contentWindow.http_streaming) == 'undefined')
96 on IE7 the the window frame scope is cleaned after the href is set, so we wait
97 for a well know variable value before assign this object value to it (OO is a passion)
99 if (this.ifra.contentWindow.http_streaming == "ready") {
100 this.ifra.contentWindow.http_streaming = this;
101 this.watchable = true;
102 this.log("hs::watchdog: watchable = yes");
106 this.log("hs::watchdog: this.keepalive_old: "+this.keepalive_old+" this.keepalive_new: "+this.keepalive_new);
107 if (this.keepalive_old == this.keepalive_new) {
108 this.keepalives_equal++;
111 this.keepalive_old = this.keepalive_new;
112 this.keepalives_equal = 0;
115 if (this.keepalives_equal > this.keepalives_eq_max) {
116 this.log("hs::watchdog: MAX ACHIEVED "+this.keepalives_equal);
122 // PICK COMMANDS FROM STREAM
124 // CHECK: maybe again here isn't needed
126 if (typeof(this.ifra.contentWindow.ctx_new) == 'undefined')
128 if (this.ifra.contentWindow.ctx_new.length == this.ctx_old_len) {
129 // this.ctx_new = this.ctx_old = "";
130 // FIXME find a more robust clean method
133 this.log("new: "+ this.ifra.contentWindow.ctx_new.length + " old: "+this.ctx_old_len);
134 this.keepalive_new++;
135 for (i = this.ctx_old_len ; i < this.ifra.contentWindow.ctx_new.length ; i++) {
136 if (this.ifra.contentWindow.ctx_new[i] != '_')
139 if (i == this.ifra.contentWindow.ctx_new.length) {
140 this.ctx_old_len = i;
143 comm_newpart = this.ifra.contentWindow.ctx_new.substr(this.ctx_old_len);
145 comm_arr = comm_newpart.match(this.comm_match);
148 for (i = 0 ; i < comm_arr.length ; i++) {
149 var temp = comm_arr[i].replace(this.comm_clean,"$1").split("|");
151 this.gst.comms = this.gst.comms.concat(temp);
152 // XX alert("COMM_ARR["+i+"]: "+comm_arr[i]+" LEN:"+comm_arr[i].length);
153 comm_len += comm_arr[i].length;
155 this.ctx_old += comm_newpart.substr(0,comm_len);
158 this.ctx_old_len = this.ctx_old.length;
163 // EXECUTION OF STREAM COMMANDS
166 //MOP ?? xhrrestart = 0;
167 if (this.gst.st_loc < this.gst.st_loc_new) {
168 // there is some slow actions running
171 else if (this.gst.comms.length > 0) {
174 singlecomm = this.gst.comms.shift();
175 // alert("EXE"+gugu);
176 // $("xhrdeltalog").innerHTML = "EVALL: "+singlecomm.replace("<", "<", "g"); +"<br>";
179 this.cmdproc(singlecomm);
186 this.watchdog_hdl = setTimeout(function(obj) { /* obj.log("tout2"); */ obj.watchdog(); }, this.watchdog_timeout, this);
190 keepalive: function (s) {
191 this.log("hs::keepalive");
194 this.ifra.contentWindow.ctx_new += "@BEGIN@"+s+"@END@";
197 this.ifra.contentWindow.ctx_new += "_";
199 // this.keepalive_new++;
203 // this.log("PATH: "+this.ifra.contentWindow.location.protocol + "://" + this.ifra.contentWindow.location.host + "/" + this.ifra.contentWindow.location.pathname);
206 if (this.watchdog_hdl != null) {
207 clearTimeout(this.watchdog_hdl);
208 this.watchdog_hdl = null;
212 this.log("hs::reload");
213 this.watchable = false;
214 if (this.ifra != null) {
215 this.doc.body.removeChild(this.ifra);
220 this.ctx_old_len = 0;
223 reload: function () {
229 if (this.console != null) {
230 return (this.console.log(s));