4 * Copyright (C) 2006-2011 Matteo Nastasi
5 * mailto: nastasi@alternativeoutput.it
6 * matteo.nastasi@milug.org
7 * web: http://www.alternativeoutput.it
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details. You should have received a
18 * copy of the GNU General Public License along with this program; if
19 * not, write to the Free Software Foundation, Inc, 59 Temple Place -
20 * Suite 330, Boston, MA 02111-1307, USA.
24 var xhr_rd_cookiepath = "/brisk/";
26 var xhr_rd_stopped = true;
27 var xhr_rd_oldctx = "";
28 var xhr_rd_newctx = "";
30 var xhr_rd_delayed = null;
31 var xhr_rd_cur_n = -1;
32 var xhr_rd_old_n = -1;
33 var xhr_rd_checkedlen = 0;
34 var xhr_rd_watchdog = null;
41 if ($("heartbit").innerHTML.length >= 120) {
42 $("heartbit").innerHTML = $("heartbit").innerHTML.substring(10);
43 $("heartbit").innerHTML += symb;
46 $("heartbit").innerHTML += symb;
48 // $("heartbit").innerHTML = $("heartbit").innerHTML.substring(20,20); // DA METTERE APPOSTO!!!!
52 function xhr_rd_cb(xhr_rd)
56 // console.log(xhr_rd.readyState);
58 if (xhr_rd.readyState == 4) {
59 if (typeof xhr_rd_watchdog != 'undefined' && xhr_rd_watchdog != null) {
61 clearTimeout(xhr_rd_watchdog);
62 xhr_rd_watchdog = null;
65 // console.log("SS: "+safestatus(xhr_rd));
68 if ((ret = safestatus(xhr_rd)) == 200) {
70 // console.log("del a null "+xhr_rd_delayed);
71 } else if (ret != -1) {
74 // alert('There was a problem with the request.' + ret);
78 xhr_rd_delayed = null;
79 xhr_rd_stopped = true;
83 function xhr_rd_abort(xhr)
91 function xhr_rd_start(sess,stat,subst,step)
94 //x alert("the_end1");
95 if (typeof xhr_rd_watchdog != 'undefined' && xhr_rd_watchdog != null) {
97 clearTimeout(xhr_rd_watchdog);
98 xhr_rd_watchdog = null;
102 createCookie("sess", sess, 24*365, xhr_rd_cookiepath);
104 // NOTE: *ctx = "" to prevent konqueror stream commands duplication.
108 /* NOTE document.uniqueID exists only under IE */
109 // if (g_is_spawn == 1)
110 // alert("di qui3: "+(g_is_spawn == 1 ? "&table_idx="+g_table_idx : ""));
111 xhr_rd.open('GET', 'index_rd.php?sess='+sess+"&stat="+stat+"&subst="+subst+"&step="+step+"&onlyone="+(document.uniqueID ? "TRUE" : "FALSE")+"&myfrom="+myfrom, true);
113 xhr_rd.onreadystatechange = function() { xhr_rd_cb(xhr_rd); }
116 // TODO: qui avvio del timer per riavviare xhr
118 xhr_rd_watchdog = setTimeout(xhr_rd_abort, 60000, xhr_rd);
120 xhr_rd_stopped = false;
124 function xhr_rd_poll(sess)
132 if (watchdog >= 50) {
134 // alert("ABORT XHR_RD");
135 xhr_rd_stopped = true;
139 var zug = "XHR_RD_POLL sess = "+sess+" stat = "+stat+" subst = "+subst+" step = "+gst.st+" step_loc = "+gst.st_loc+" step_loc_new = "+gst.st_loc_new+" STOP: "+xhr_rd_stopped;
141 if (zug != $("sandbox").innerHTML)
142 $("sandbox").innerHTML = zug;
150 if (gst.st_loc < gst.st_loc_new) {
151 // there is some slow actions running
154 else if (gst.comms.length > 0) {
157 singlecomm = gst.comms.shift();
158 // alert("EXE"+gugu);
159 // $("xhrdeltalog").innerHTML = "EVALL: "+singlecomm.replace("<", "<", "g"); +"<br>";
170 if (xhr_rd.responseText != null)
171 xhr_rd_newctx = xhr_rd.responseText;
174 if (xhr_rd_stopped == true) {
175 xhr_rd_stopped = false;
176 // XX $("xhrstart").innerHTML += "XHRSTART: da catch<br>";
177 if (xhr_rd_delay > 0) {
178 if (xhr_rd_delayed == null) {
179 // console.log("XXX DI QUI "+xhr_rd_delay);
180 xhr_rd_delayed = setTimeout(xhr_rd_start, xhr_rd_delay, sess, stat, subst, gst.st);
181 // console.log("XXX DI QUI post"+xhr_rd_delayed);
185 // console.log("yyy DI QUI "+xhr_rd_delay);
186 xhr_rd_start(sess, stat, subst, gst.st);
191 // $("sandbox").innerHTML += "return 1<br>";
192 if (the_end != true) {
194 setTimeout(xhr_rd_poll, tout, sess);
200 //x alert("the_end2");
201 if (typeof xhr_rd_watchdog != 'undefined' && xhr_rd_watchdog != null) {
202 clearTimeout(xhr_rd_watchdog);
203 xhr_rd_watchdog = null;
210 // no new char from the last loop, break
211 if (xhr_rd_old_n == xhr_rd_cur_n &&
212 xhr_rd_newctx.length == xhr_rd_checkedlen) {
218 // $("sandbox").innerHTML += "BIG IF<br>";
226 var match_lines = /^_*$/;
230 // check for the same command group
231 if (xhr_rd_old_n != xhr_rd_cur_n) {
232 xhr_rd_old_n = xhr_rd_cur_n;
233 xhr_rd_checkedlen = 0;
237 delta = xhr_rd_oldctx.length;
239 // $("xhrlog").innerHTML += "EVERY SEC<br>";
240 for (i = delta ; i < xhr_rd_newctx.length ; i++) {
241 if (xhr_rd_newctx[i] != '_')
244 if (i == xhr_rd_newctx.length) {
245 xhr_rd_checkedlen = i;
249 // $("xhrlog").innerHTML += "CHECK COM<br>";
250 // extracts the new part of the command string
251 comm_newpart = xhr_rd_newctx.substr(delta);
253 // XX $("xhrlog").innerHTML = xhr_rd_newctx.replace("<", "<", "g");
255 // $("response").innerHTML = comm_newpart;
256 comm_match = /_*@BEGIN@(.*?)@END@/g;
257 comm_clean = /_*@BEGIN@(.*?)@END@/;
259 comm_arr = comm_newpart.match(comm_match);
261 // $("sandbox").innerHTML += "PRE COMMARR<br>";
263 // XX $("xhrdeltalog").innerHTML += "DELTA: "+delta +"<br>";
264 // XX alert("xhr_rd_newctx: "+xhr_rd_newctx);
265 // $("sandbox").innerHTML += "POST COMMARR<br>";
266 for (i = 0 ; i < comm_arr.length ; i++) {
267 var temp = comm_arr[i].replace(comm_clean,"$1").split("|");
268 gst.comms = gst.comms.concat(temp);
269 // XX alert("COMM_ARR["+i+"]: "+comm_arr[i]+" LEN:"+comm_arr[i].length);
270 comm_len += comm_arr[i].length;
273 xhr_rd_oldctx += comm_newpart.substr(0,comm_len);
274 // XX alert("XHR_RD_OLDCTX: "+xhr_rd_oldctx);
277 xhr_rd_checkedlen = xhr_rd_oldctx.length;
282 if (xhrrestart == 1 && xhr_rd_stopped == true) {
283 // $("sandbox").innerHTML += "LITTLE IF<br>";
285 // XX $("xhrstart").innerHTML += "XHRSTART: da end poll<br>";
287 if (xhr_rd_delay > 0) {
288 if (xhr_rd_delayed == null) {
289 // console.log("XXX DI QUO "+xhr_rd_delay);
290 xhr_rd_delayed = setTimeout(xhr_rd_start, xhr_rd_delay, sess, stat, subst, gst.st);
291 // console.log("XXX DI QUO post"+xhr_rd_delayed);
295 // console.log("yyy DI QUO "+xhr_rd_delay);
296 xhr_rd_start(sess, stat, subst, gst.st);
301 if (the_end != true) {
302 setTimeout(xhr_rd_poll, tout, sess);
305 //x alert("the_end3");
306 if (typeof(xhr_rd_watchdog) != 'undefined') {
307 if (xhr_rd_watchdog != null) {
308 clearTimeout(xhr_rd_watchdog);
309 xhr_rd_watchdog = null;
317 window.onload = function () {
318 xhr_rd = createXMLHttpRequest();
320 sess = $("user").value;
321 window.setTimeout(xhr_rd_poll, 0, sess);