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@/,
68 start: function(page) {
69 this.log("http_streaming:start restart: "+this.restart_n);
70 this.keepalives_equal = 0;
71 this.ifra = this.doc.createElement("iframe");
72 this.ifra.style.visibility = "hidden";
73 this.doc.body.appendChild(this.ifra);
75 this.page = url_complete(this.win.location.href, page);
76 this.page = url_append_args(this.page, "sess", this.sess, "st", this.gst.st);
79 // this.log(this.ifra);
80 this.ifra.contentWindow.location.href = this.page;
82 this.watchdog_hdl = setTimeout(function(obj) { obj.log("tout1"); obj.watchdog(); }, this.watchdog_timeout, this);
85 watchdog: function () {
87 var comm_newpart, comm_len, comm_arr;
90 // WATCHDOGING THE CONNECTION
91 this.log("hs::watchdog: start, cur equal times: "+this.keepalives_equal);
92 if ( (this.watchdog_ct % this.watchdog_checktm) == 0 || !this.watchable) {
93 if (!this.watchable) {
95 if (typeof(this.ifra.contentWindow.http_streaming) == 'undefined')
98 on IE7 the the window frame scope is cleaned after the href is set, so we wait
99 for a well know variable value before assign this object value to it (OO is a passion)
101 if (this.ifra.contentWindow.http_streaming == "ready") {
102 this.ifra.contentWindow.http_streaming = this;
103 this.watchable = true;
104 this.log("hs::watchdog: watchable = yes");
108 this.log("hs::watchdog: this.keepalive_old: "+this.keepalive_old+" this.keepalive_new: "+this.keepalive_new);
109 if (this.keepalive_old == this.keepalive_new) {
110 this.keepalives_equal++;
113 this.keepalive_old = this.keepalive_new;
114 this.keepalives_equal = 0;
117 if (this.keepalives_equal > this.keepalives_eq_max) {
118 this.log("hs::watchdog: MAX ACHIEVED "+this.keepalives_equal);
124 // PICK COMMANDS FROM STREAM
126 // CHECK: maybe again here isn't needed
128 if (typeof(this.ifra.contentWindow.ctx_new) == 'undefined')
131 ctx_new_len = this.ifra.contentWindow.ctx_new.length;
132 if (ctx_new_len == this.ctx_old_len) {
135 this.log("new: "+ ctx_new_len + " old: "+this.ctx_old_len);
136 this.keepalive_new++;
137 for (i = this.ctx_old_len ; i < ctx_new_len ; i++) {
138 if (this.ifra.contentWindow.ctx_new.charAt(i) != '_') {
139 this.log("ctx_new.char(i) != '_' ["+this.ifra.contentWindow.ctx_new.charAt(i)+"]");
143 this.log("ctx_new.charAt(i) == '_'");
146 this.ctx_old_len = i;
147 if (i == ctx_new_len) {
148 this.log("old_len == i");
152 this.log("old_len != i: "+i);
154 comm_newpart = this.ifra.contentWindow.ctx_new.substr(this.ctx_old_len);
156 comm_arr = comm_newpart.match(this.comm_match);
159 for (i = 0 ; i < comm_arr.length ; i++) {
160 var temp = comm_arr[i].replace(this.comm_clean,"$1").split("|");
162 this.gst.comms = this.gst.comms.concat(temp);
163 // XX alert("COMM_ARR["+i+"]: "+comm_arr[i]+" LEN:"+comm_arr[i].length);
164 comm_len += comm_arr[i].length;
168 this.ctx_old_len += comm_len;
173 // EXECUTION OF STREAM COMMANDS
176 //MOP ?? xhrrestart = 0;
177 if (this.gst.st_loc < this.gst.st_loc_new) {
178 // there is some slow actions running
181 else if (this.gst.comms.length > 0) {
184 singlecomm = this.gst.comms.shift();
185 // alert("EXE"+gugu);
186 // $("xhrdeltalog").innerHTML = "EVALL: "+singlecomm.replace("<", "<", "g"); +"<br>";
189 this.cmdproc(singlecomm);
196 this.watchdog_hdl = setTimeout(function(obj) { /* obj.log("tout2"); */ obj.watchdog(); }, this.watchdog_timeout, this);
200 keepalive: function (s) {
201 this.log("hs::keepalive");
204 this.ifra.contentWindow.ctx_new += "@BEGIN@"+s+"@END@";
207 this.ifra.contentWindow.ctx_new += "_";
209 // this.keepalive_new++;
213 // this.log("PATH: "+this.ifra.contentWindow.location.protocol + "://" + this.ifra.contentWindow.location.host + "/" + this.ifra.contentWindow.location.pathname);
216 if (this.watchdog_hdl != null) {
217 clearTimeout(this.watchdog_hdl);
218 this.watchdog_hdl = null;
222 this.log("hs::reload");
223 this.watchable = false;
224 if (this.ifra != null) {
225 this.doc.body.removeChild(this.ifra);
229 this.ctx_old_len = 0;
232 reload: function () {
238 if (this.console != null) {
239 return (this.console.log(s));