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@/,
65 start: function(page) {
66 this.log("http_streaming:start restart: "+this.restart_n);
67 this.keepalives_equal = 0;
68 this.ifra = this.doc.createElement("iframe");
69 this.ifra.style.visibility = "hidden";
70 this.doc.body.appendChild(this.ifra);
72 this.page = url_complete(this.win.location.href, page);
73 this.page = url_append_args(this.page, "sess", this.sess, "st", this.gst.st);
76 // this.log(this.ifra);
77 this.ifra.contentWindow.location.href = this.page;
79 this.watchdog_hdl = setTimeout(function(obj) { obj.log("tout1"); obj.watchdog(); }, this.watchdog_timeout, this);
82 watchdog: function () {
84 var comm_newpart, comm_len, comm_arr;
87 // WATCHDOGING THE CONNECTION
88 this.log("hs::watchdog: start, cur equal times: "+this.keepalives_equal);
89 if ( (this.watchdog_ct % this.watchdog_checktm) == 0 || !this.watchable) {
90 if (!this.watchable) {
92 if (typeof(this.ifra.contentWindow.http_streaming) == 'undefined')
95 on IE7 the the window frame scope is cleaned after the href is set, so we wait
96 for a well know variable value before assign this object value to it (OO is a passion)
98 if (this.ifra.contentWindow.http_streaming == "ready") {
99 this.ifra.contentWindow.http_streaming = this;
100 this.watchable = true;
101 this.log("hs::watchdog: watchable = yes");
105 this.log("hs::watchdog: this.keepalive_old: "+this.keepalive_old+" this.keepalive_new: "+this.keepalive_new);
106 if (this.keepalive_old == this.keepalive_new) {
107 this.keepalives_equal++;
110 this.keepalive_old = this.keepalive_new;
111 this.keepalives_equal = 0;
114 if (this.keepalives_equal > this.keepalives_eq_max) {
115 this.log("hs::watchdog: MAX ACHIEVED "+this.keepalives_equal);
121 // PICK COMMANDS FROM STREAM
123 // CHECK: maybe again here isn't needed
125 if (typeof(this.ifra.contentWindow.ctx_new) == 'undefined' ||
126 typeof(this.ifra.contentWindow.ctx_old_len) == 'undefined')
129 ctx_new_len = this.ifra.contentWindow.ctx_new.length;
130 if (ctx_new_len <= this.ifra.contentWindow.ctx_old_len) {
133 this.log("new: "+ ctx_new_len + " old: "+this.ifra.contentWindow.ctx_old_len);
134 this.keepalive_new++;
135 for (i = this.ifra.contentWindow.ctx_old_len ; i < ctx_new_len ; i++) {
136 if (this.ifra.contentWindow.ctx_new.charAt(i) != '_') {
137 this.log("ctx_new.char(i) != '_' ["+this.ifra.contentWindow.ctx_new.charAt(i)+"]");
141 this.log("ctx_new.charAt(i) == '_'");
144 this.ifra.contentWindow.ctx_old_len = i;
145 if (i == ctx_new_len) {
146 this.log("old_len == i");
150 this.log("old_len != i: "+i);
152 comm_newpart = this.ifra.contentWindow.ctx_new.substr(this.ifra.contentWindow.ctx_old_len);
154 comm_arr = comm_newpart.match(this.comm_match);
157 for (i = 0 ; i < comm_arr.length ; i++) {
158 var temp = comm_arr[i].replace(this.comm_clean,"$1").split("|");
160 this.gst.comms = this.gst.comms.concat(temp);
161 // XX alert("COMM_ARR["+i+"]: "+comm_arr[i]+" LEN:"+comm_arr[i].length);
162 comm_len += comm_arr[i].length;
166 this.ifra.contentWindow.ctx_old_len += comm_len;
171 // EXECUTION OF STREAM COMMANDS
174 //MOP ?? xhrrestart = 0;
175 if (this.gst.st_loc < this.gst.st_loc_new) {
176 // there is some slow actions running
179 else if (this.gst.comms.length > 0) {
182 singlecomm = this.gst.comms.shift();
183 // alert("EXE"+gugu);
184 // $("xhrdeltalog").innerHTML = "EVALL: "+singlecomm.replace("<", "<", "g"); +"<br>";
187 this.cmdproc(singlecomm);
194 this.watchdog_hdl = setTimeout(function(obj) { /* obj.log("tout2"); */ obj.watchdog(); }, this.watchdog_timeout, this);
198 keepalive: function (s) {
199 this.log("hs::keepalive");
202 this.ifra.contentWindow.ctx_new += "@BEGIN@"+s+"@END@";
205 this.ifra.contentWindow.ctx_new += "_";
207 // this.keepalive_new++;
211 // this.log("PATH: "+this.ifra.contentWindow.location.protocol + "://" + this.ifra.contentWindow.location.host + "/" + this.ifra.contentWindow.location.pathname);
214 if (this.watchdog_hdl != null) {
215 clearTimeout(this.watchdog_hdl);
216 this.watchdog_hdl = null;
220 this.log("hs::reload");
221 this.watchable = false;
222 if (this.ifra != null) {
223 this.doc.body.removeChild(this.ifra);
229 reload: function () {
235 if (this.console != null) {
236 return (this.console.log(s));