--- googlecode.com/svn/trunk/public_html/poll.html 2006/11/20 17:59:30 3 +++ googlecode.com/svn/trunk/public_html/poll.html 2007/12/20 21:24:24 32 @@ -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="; + var url = parent.Meteor.getSubsUrl(); + if (typeof(url)!="undefined") { + try { + document.domain = thisdomain; + } catch (e) {} + 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); } - 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; } function handleresponse() { - if (this.readyState == 4) { + if (typeof(pollreq) == "object" && pollreq.readyState == 4 && !isaborted) { + try { + clearTimeout(polltimer); + } catch (e) {} 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)); - } + newdata = pollreq.responseText; while (1) { var x = newdata.indexOf("p("); if (x != -1) { @@ -94,22 +70,39 @@ } var now = new Date(); var t = now.getTime(); - var x = get("pollfreq") - (t-lastrequesttime); + var x = parent.Meteor.pollfreq - (t-lastrequesttime); if (x < 10) x = 10; + pollreq = null; setTimeout(poll, x); } } function ptimeout() { - if (typeof(pollreq) == "object") { + 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); +} + +function guard() { + var url = parent.Meteor.getSubsUrl(); + if (typeof(url)=="undefined") { pollreq.abort(); - delete pollreq; + pollreq = null; + clearTimeout(polltimer); } - poll(); + setTimeout('guard()', 1000); } poll(); +guard(); + - \ No newline at end of file +