Changeset 477

Show
Ignore:
Timestamp:
08/09/08 12:47:45 (5 months ago)
Author:
heyadayo
Message:

Some preliminary X-domain code for XHRs -- not testing (nor working, i imagine) yet.

Location:
trunk/daemon/orbited
Files:
2 added
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/daemon/orbited/static/Orbited.js

    r475 r477  
    741741 
    742742 
     743 
     744 
     745 
     746// XXX: the Orbited.XSDR stuff (presumably) doesn't work yet. 
     747//      mcarter - 8-9-08 (~rev 476) 
     748 
     749Orbited.singleton.XSDR = { 
     750    receiveCbs: {}, 
     751    queues: {}, 
     752    id: 0, 
     753    register: function(receive, queue) { 
     754        var id = ++Orbited.singleton.XSDR; 
     755        Orbited.singleton.XSDR.receiveCbs[id] = receive; 
     756        Orbited.singleton.XSDR.queues[id] = queue; 
     757    } 
     758} 
     759 
     760Orbited.XSDR = function() { 
     761    var self = this; 
     762 
     763    var ifr = null; 
     764    var url; 
     765    var method; 
     766    var data; 
     767    var requestHeaders; 
     768    var queue = [] 
     769    var id = Orbited.singleton.XSDR.register( 
     770        function(data) { receive(data) },  
     771        queue 
     772    ) 
     773    var bridgeUrl = new URL("") 
     774    bridgeUrl.domain = Orbited.hostname 
     775    bridgeUrl.port = Orbited.port 
     776    bridgeUrl.path = '/static/xsdrBridge.html' 
     777    bridgeUrl.hash = id; 
     778     
     779    var reset = function() { 
     780        self.responseText = "" 
     781        self.status = null; 
     782        self.readyState = 0; 
     783        url = null; 
     784        method = null; 
     785        data = null; 
     786        requestHeaders = {}; 
     787 
     788    } 
     789    reset(); 
     790 
     791    self.open = function(_method, _url, async) { 
     792        if (self.readyState == 4) { 
     793            reset(); 
     794        } 
     795        if (self.readyState != 0) { 
     796            throw new Error("Invalid readyState"); 
     797        } 
     798        if (!async) { 
     799            throw new Error("Only Async XSDR supported") 
     800        } 
     801        self.readyState = 1; 
     802        url = _url; 
     803        method = _method;         
     804    } 
     805 
     806    self.send = function(data) { 
     807        if (self.readyState != 1) { 
     808            throw new Error("Invalid readyState"); 
     809        } 
     810        if (!ifr) { 
     811            ifr = document.createElement("iframe") 
     812            hideIframe(ifr); 
     813            ifr.src = bridgeUrl.render() 
     814            document.body.appendChild(ifr); 
     815        } 
     816        else { 
     817            queue.push([method, url, data, requestHeaders]); 
     818        } 
     819    } 
     820 
     821    self.abort = function() { 
     822        if (self.readyState > 0 && self.readyState < 4) { 
     823            queue.push(['ABORT']); 
     824        } 
     825    } 
     826 
     827    self.setRequestHeader = function(key, val) { 
     828        if (self.readyState != 0) { 
     829            throw new Error("Invalid readyState"); 
     830        } 
     831        requestHeaders[key] = val; 
     832    } 
     833 
     834    self.getResponseHeader = function() { 
     835        if (self.readyState < 2) { 
     836            throw new Error("Invalid readyState"); 
     837        } 
     838        return responseHeaders[key] 
     839    } 
     840 
     841    var receive = function(payload) { 
     842        switch(payload[0]) { 
     843            case 'initialize': 
     844                push([method, url, data, requestHeaders]); 
     845                break; 
     846            case 'readystatechange': 
     847                var data = payload[1] 
     848                self.readyState = data.readyState 
     849                if (data.status) { 
     850                    self.status = data.status 
     851                } 
     852                if (data.responseText) { 
     853                    self.responseText += data.responseText 
     854                } 
     855                self.onreadystatechange(); 
     856        } 
     857    } 
     858 
     859    var hideIframe =function (ifr) { 
     860        ifr.style.display = 'block'; 
     861        ifr.style.width = '0'; 
     862        ifr.style.height = '0'; 
     863        ifr.style.border = '0'; 
     864        ifr.style.margin = '0'; 
     865        ifr.style.padding = '0'; 
     866        ifr.style.overflow = 'hidden'; 
     867        ifr.style.visibility = 'hidden'; 
     868    } 
     869     
     870} 
     871Orbited.XSDR.prototype.logger = Orbited.getLogger("Orbited.XSDR"); 
    743872 
    744873 
  • trunk/daemon/orbited/transports/base.py

    r465 r477  
    44logger = logging.get_logger('orbited.transports.base.CometTransport') 
    55class CometTransport(resource.Resource): 
    6    
     6    HEARTBEAT_INTERVAL = 5 
    77     
    88   
     
    2424     
    2525    def resetHeartbeat(self): 
    26         self.heartbeatTimer = reactor.callLater(5, self.doHeartbeat) 
     26        self.heartbeatTimer = reactor.callLater(self.HEARTBEAT_INTERVAL, self.doHeartbeat) 
    2727         
    2828    def doHeartbeat(self):