--- googlecode.com/svn/trunk/public_html/meteor.js 2006/11/20 18:05:33 5
+++ googlecode.com/svn/trunk/public_html/meteor.js 2006/11/21 09:49:07 6
@@ -1,279 +1,279 @@
-// Set domain at highest level
-var domainparts = document.domain.split(".");
-document.domain = domainparts[domainparts.length-2]+"."+domainparts[domainparts.length-1];
-
-Function.prototype.bind = function(obj) {
- var method = this,
- temp = function() {
- return method.apply(obj, arguments);
- };
- return temp;
-}
-Function.prototype.andThen=function(g) {
- var f=this;
- var a=this.arguments
- return function(args) {
- f(a);g(args);
- }
-};
-
-function Meteor(instID) {
-
- this.lastmsgreceived = -1;
- this.transferDoc = false;
- this.pingtimer = false;
- this.updatepollfreqtimer = false;
- this.lastrequest = 0;
- this.recvtimes = new Array();
- this.MHostId = false;
- this.callback_process = function() {};
- this.callback_reset = function() {};
- this.callback_eof = function() {};
- this.callback_changemode = function() {};
- this.persist = true;
-
- // Documented public properties
- this.channel = false;
- this.subdomain = "data";
- this.dynamicpageaddress = "push";
- this.backtrack = 0;
- this.smartpoll = true;
- this.pollfreq = 2000;
- this.minpollfreq = 2000;
- this.mode = "stream";
- this.polltimeout=30000;
- this.maxmessages=0;
- this.pingtimeout = 10000;
-
- // Set or retrieve host id. Cookie takes this form:
- // MeteorID=123:6356353/124:098320454;
- var MeteIds = Meteor.readCookie("MeteorID");
- var regex1 = new RegExp("^([0-9\:\/M]+\/)*"+instID+"\:([^\/]+)(\/[0-9\:\/M]+)*$");
- var regex2 = new RegExp("^([0-9\:\/M]+\/)*M\:([^\/]+)(\/[0-9\:\/M]+)*$");
- if (typeof(instID) == "Number" && regex1.exec(MeteIds)) {
- this.MHostId = ma[2];
- } else if (typeof(instID) == "Number") {
- this.MHostId = Math.floor(Math.random()*1000000);
- var newcookie = (MeteIds)?MeteIds+"/":"";
- newcookie += instID+":"+this.MHostId;
- Meteor.createCookie("MeteorID", newcookie);
- } else if (ma = regex2.exec(MeteIds)) {
- this.MHostId = ma[2];
- } else {
- this.MHostId = Math.floor(Math.random()*1000000);
- var newcookie = (MeteIds)?MeteIds+"/":"";
- newcookie += "M:"+this.MHostId;
- Meteor.createCookie("MeteorID", newcookie);
- }
- this.instID = (typeof(instID) != "undefined") ? instID : 0;
-}
-
-Meteor.instances = new Array();
-Meteor.servertimeoffset = 0;
-
-Meteor.create = function(instID) {
- if (!instID) instID = 0;
- Meteor.instances[instID] = new Meteor(instID);
- return Meteor.instances[instID];
-}
-
-Meteor.register = function(ifr) {
- instid = new String(ifr.window.frameElement.id);
- instid = instid.replace("meteorframe_", "");
- ifr.p = this.instances[instid].process.bind(this.instances[instid]);
- ifr.r = this.instances[instid].reset.bind(this.instances[instid]);
- ifr.eof = this.instances[instid].eof.bind(this.instances[instid]);
- ifr.get = this.instances[instid].get.bind(this.instances[instid]);
- ifr.increasepolldelay = this.instances[instid].increasepolldelay.bind(this.instances[instid]);
-}
-
-Meteor.setServerTime = function(timestamp) {
- var now = new Date();
- var clienttime = (now.getTime() / 1000);
- Meteor.servertimeoffset = timestamp - clienttime;
-}
-
-Meteor.prototype.start = function() {
- this.persist = (this.maxmessages)?1:0;
- this.smartpoll = (this.smartpoll)?1:0;
- this.mode = (this.mode=="stream")?"stream":"poll";
- if (!this.subdomain || !this.channel) throw "Channel or Meteor subdomain host not specified";
- var now = new Date();
- var t = now.getTime();
- if (typeof(this.transferDoc)=="object") {
- this.transferDoc.open();
- this.transferDoc.close();
- delete this.transferDoc;
- }
- if (document.getElementById("meteorframe_"+this.instID)) {
- document.body.removeChild(document.getElementById("meteorframe_"+this.instID));
- }
- if (this.mode=="stream") {
- if (document.all) {
- this.transferDoc = new ActiveXObject("htmlfile");
- this.transferDoc.open();
- this.transferDoc.write("");
- this.transferDoc.write("