--- 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();
+