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