ctx_old attribute removed (we will use ctx_old_len only), url_complete js function...
[xynt.git] / web / xynt / xynt-http-streaming.js
index 5a0c615..f6b0a0b 100644 (file)
@@ -60,7 +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,
@@ -73,7 +72,7 @@ http_streaming.prototype = {
         this.ifra.style.visibility = "hidden";
         this.doc.body.appendChild(this.ifra);
         if (page != null)
-            this.page = page;
+            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);
 
@@ -86,10 +85,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')
@@ -127,21 +127,30 @@ http_streaming.prototype = {
             again = 0;
             if (typeof(this.ifra.contentWindow.ctx_new) == '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_length = this.ifra.contentWindow.ctx_new.length;
+            if (ctx_new_length == this.ctx_old_len) {
                 break;
             }
-            this.log("new: "+ this.ifra.contentWindow.ctx_new.length + "  old: "+this.ctx_old_len);
+            this.log("new: "+ ctx_new_length + "  old: "+this.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.ctx_old_len ; i < ctx_new_length ; 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.ctx_old_len = i;
+           if (i == ctx_new_length) {
+                this.log("old_len == i");
                break;
            }
+            else {
+                this.log("old_len != i: "+i);
+            }
             comm_newpart = this.ifra.contentWindow.ctx_new.substr(this.ctx_old_len);    
             comm_len = 0;
            comm_arr = comm_newpart.match(this.comm_match);
@@ -154,10 +163,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.ctx_old_len += comm_len;
         } while (again);
         
 
@@ -218,7 +226,6 @@ http_streaming.prototype = {
             delete this.ifra;
             this.ifra = null;
         }
-        this.ctx_old = "";
         this.ctx_old_len = 0;
     },