--- googlecode.com/svn/trunk/public_html/poll.html 2006/11/20 17:59:30 3 +++ googlecode.com/svn/trunk/public_html/poll.html 2008/02/02 16:49:20 39 @@ -7,77 +7,53 @@ var topdomain = domainparts[domainparts.length-2]+"."+domainparts[domainparts.length-1]; document.domain = topdomain; var lastrequesttime = 0; -var pollreq = false; +var pollreq = null; var polltimer = false; +var i=0; +var isaborted = 0; parent.Meteor.register(this); -Function.prototype.bind = function(obj) { - var method = this, - temp = function() { - return method.apply(obj, arguments); - }; - return temp; -} - function newXmlHttp() { - var xmlhttp; - /*@cc_on @*/ - /*@if (@_jscript_version >= 5) - try { - xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); - } catch (e) { - try { - xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); - } catch (E) { - xmlhttp = false; - } - } - @end @*/ - if (!xmlhttp && typeof XMLHttpRequest!='undefined') { - xmlhttp = new XMLHttpRequest(); - } - return xmlhttp; + try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {} + try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} + try { return new XMLHttpRequest(); } catch(e) {} + return null; } function poll() { - if (polltimer) clearTimeout(polltimer); + isaborted = 0; + pollreq = null; + try { + clearTimeout(polltimer); + } catch (e) {} var byteoffset = 0; var newdata; - document.domain = topdomain; - var url = "http://"+location.hostname+"/push?channel="+get("channel")+"&id="+get("MHostId")+"&persist="+get("persist")+"&template=2"; - if (get("lastmsgreceived") >= 0) { - url += "&restartfrom="+(get("lastmsgreceived")+1); - } else if (get("backtrack") > 0) { - url += "&backtrack="+get("backtrack"); - } else if (typeof(get("backtrack")) != "number") { - url += "&restartfrom="; - } - if (get("maxmessages") && get("persist")) url += "&maxmessages="+get("maxmessages"); - var now = new Date(); - var t = now.getTime(); - url += "&nocache="+t; try { - document.domain = thisdomain; - } catch (e) {} - pollreq = newXmlHttp(); - pollreq.open("GET", url, true); - pollreq.onreadystatechange = handleresponse.bind(pollreq); - lastrequesttime = t; - if (get("polltimeout")) polltimer = setTimeout(ptimeout, get("polltimeout")); - pollreq.send(null); - document.domain=topdomain; + var url = parent.Meteor.getSubsUrl(); + } catch(e) { + return false; + } + if (typeof(url)!="undefined") { + pollreq = newXmlHttp(); + pollreq.onreadystatechange = handleresponse; + pollreq.open("GET", url, true); + var now = new Date(); + var t = now.getTime(); + lastrequesttime = t; + if (parent.Meteor.polltimeout) polltimer = setTimeout(ptimeout, parent.Meteor.polltimeout); + pollreq.send(null); + } } function handleresponse() { - if (this.readyState == 4) { - if (typeof(topdomain) == "undefined") return false; - document.domain=topdomain; - newdata = this.responseText; - var x = newdata.indexOf("parent.Meteor.setServerTime("); - if (x != -1) { - y = newdata.indexOf(");", x); - if (y != -1) eval(newdata.substring(x,y+2)); - } + if (typeof(pollreq) == "object" && pollreq.readyState == 4 && !isaborted) { + try { + clearTimeout(polltimer); + } catch (e) {} + try { + var y = parent.Meteor.getSubsUrl(); + } catch (e) { return false }; + newdata = pollreq.responseText; while (1) { var x = newdata.indexOf("p("); if (x != -1) { @@ -92,24 +68,32 @@ break; } } - var now = new Date(); - var t = now.getTime(); - var x = get("pollfreq") - (t-lastrequesttime); - if (x < 10) x = 10; - setTimeout(poll, x); + if (parent.Meteor.status) { + var now = new Date(); + var t = now.getTime(); + var x = parent.Meteor.pollfreq - (t-lastrequesttime); + if (x < 10) x = 10; + pollreq = null; + setTimeout(poll, x); + } } } function ptimeout() { - if (typeof(pollreq) == "object") { - pollreq.abort(); - delete pollreq; - } - poll(); + isaborted = 1; + pollreq.abort(); + pollreq = null; + clearTimeout(polltimer); + var now = new Date(); + var t = now.getTime(); + var x = parent.Meteor.pollfreq - (t-lastrequesttime); + if (x < 10) x = 10; + setTimeout(poll, x); } poll(); + - \ No newline at end of file +