X-Git-Url: http://mop.ddnsfree.com/gitweb/?p=xynt.git;a=blobdiff_plain;f=web%2Fxynt%2Fxynt-http-streaming.js;h=130af82250f7e4cd955f3e9e910d4a71e9d5f892;hp=477e7547a315bf9ce8333efc18d35e11fdcf4010;hb=HEAD;hpb=f204bcec7746f916c356f31dbe814a865c37dd0d diff --git a/web/xynt/xynt-http-streaming.js b/web/xynt/xynt-http-streaming.js index 477e754..130af82 100644 --- a/web/xynt/xynt-http-streaming.js +++ b/web/xynt/xynt-http-streaming.js @@ -60,10 +60,6 @@ http_streaming.prototype = { cmdproc: null, comm_match: /_*@BEGIN@(.*?)@END@/g, comm_clean: /_*@BEGIN@(.*?)@END@/, - ctx_old: "", - ctx_old_len: 0, - // ctx_new: "", - ctx_new_len: 0, stream: "", start: function(page) { @@ -73,9 +69,11 @@ http_streaming.prototype = { this.ifra.style.visibility = "hidden"; this.doc.body.appendChild(this.ifra); if (page != null) - this.page = page; - this.page = url_append_args(this.page, "sess", this.sess, "st", gst.st); + this.page = url_complete(this.win.location.href, page); + this.page = url_append_args(this.page, "sess", this.sess, "st", this.gst.st); this.log(this.page); + + // this.log(this.ifra); this.ifra.contentWindow.location.href = this.page; this.watchdog_ct = 0; this.watchdog_hdl = setTimeout(function(obj) { obj.log("tout1"); obj.watchdog(); }, this.watchdog_timeout, this); @@ -84,10 +82,11 @@ http_streaming.prototype = { watchdog: function () { var i, again; var comm_newpart, comm_len, comm_arr; + var ctx_new_len; // WATCHDOGING THE CONNECTION + this.log("hs::watchdog: start, cur equal times: "+this.keepalives_equal); if ( (this.watchdog_ct % this.watchdog_checktm) == 0 || !this.watchable) { - this.log("hs::watchdog: start, cur equal times: "+this.keepalives_equal); if (!this.watchable) { do { if (typeof(this.ifra.contentWindow.http_streaming) == 'undefined') @@ -123,24 +122,34 @@ http_streaming.prototype = { do { // CHECK: maybe again here isn't needed again = 0; - if (typeof(this.ifra.contentWindow.ctx_new) == 'undefined') + if (typeof(this.ifra.contentWindow.ctx_new) == 'undefined' || + typeof(this.ifra.contentWindow.ctx_old_len) == 'undefined') break; - if (this.ifra.contentWindow.ctx_new.length == this.ctx_old_len) { - // this.ctx_new = this.ctx_old = ""; - // FIXME find a more robust clean method + + ctx_new_len = this.ifra.contentWindow.ctx_new.length; + if (ctx_new_len <= this.ifra.contentWindow.ctx_old_len) { break; } - this.log("new: "+ this.ifra.contentWindow.ctx_new.length + " old: "+this.ctx_old_len); + this.log("new: "+ ctx_new_len + " old: "+this.ifra.contentWindow.ctx_old_len); this.keepalive_new++; - for (i = this.ctx_old_len ; i < this.ifra.contentWindow.ctx_new.length ; i++) { - if (this.ifra.contentWindow.ctx_new[i] != '_') + for (i = this.ifra.contentWindow.ctx_old_len ; i < ctx_new_len ; i++) { + if (this.ifra.contentWindow.ctx_new.charAt(i) != '_') { + this.log("ctx_new.char(i) != '_' ["+this.ifra.contentWindow.ctx_new.charAt(i)+"]"); break; + } + else { + this.log("ctx_new.charAt(i) == '_'"); + } } - if (i == this.ifra.contentWindow.ctx_new.length) { - this.ctx_old_len = i; + this.ifra.contentWindow.ctx_old_len = i; + if (i == ctx_new_len) { + this.log("old_len == i"); break; } - comm_newpart = this.ifra.contentWindow.ctx_new.substr(this.ctx_old_len); + else { + this.log("old_len != i: "+i); + } + comm_newpart = this.ifra.contentWindow.ctx_new.substr(this.ifra.contentWindow.ctx_old_len); comm_len = 0; comm_arr = comm_newpart.match(this.comm_match); @@ -152,10 +161,9 @@ http_streaming.prototype = { // XX alert("COMM_ARR["+i+"]: "+comm_arr[i]+" LEN:"+comm_arr[i].length); comm_len += comm_arr[i].length; } - this.ctx_old += comm_newpart.substr(0,comm_len); again = 1; } - this.ctx_old_len = this.ctx_old.length; + this.ifra.contentWindow.ctx_old_len += comm_len; } while (again); @@ -216,8 +224,6 @@ http_streaming.prototype = { delete this.ifra; this.ifra = null; } - this.ctx_old = ""; - this.ctx_old_len = 0; }, reload: function () {