Changeset 27 for tabled.py

Show
Ignore:
Timestamp:
02/05/08 19:00:53 (4 years ago)
Author:
mike
Message:

Added async stuff

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • tabled.py

    r26 r27  
    2525     
    2626    def sendMessage(self, data): 
    27         try: 
    28             self.sendMessageViaTransport( encodejson(data) ) 
    29         except cjson.EncodeError,e: 
    30             print data 
    31             print e 
     27        self.sendMessageViaTransport( data ) 
    3228        d = defer.Deferred() 
    3329        d.addCallback(self.sendMessage) 
     
    6864            elif method == "action": 
    6965                value =  decoded["value"] 
     66                if value == "null": value = None 
    7067                if value != None: value = float(value) 
    7168                self.table.action(self.id, decoded["action"],value) 
     
    8178 
    8279class PokerTableProtocol(NetstringReceiver,BasePokerTableHandler): 
    83     sendMessageViaTransport = NetstringReceiver.sendString 
     80 
     81    def sendMessageViaTransport(self,data): 
     82        NetstringReceiver.sendString(self, encodejson(data)) 
     83         
    8484 
    8585    def stringReceived(self, line): 
     
    9797    def __init__(self): 
    9898        BasePokerTableHandler.__init__(self) 
    99         self.__waitingRequest=None 
     99        #request consists of (jsoncallback,deferred) 
     100        self.__waitingRequest=[] 
    100101        self.__messageQueue=[] 
    101         self.jsoncallback = None 
    102102 
    103103    def sendMessageViaTransport(self, data): 
     
    113113 
    114114    def checkWaiting(self): 
    115         if self.__waitingRequest != None and len(self.__messageQueue) > 0: 
     115        if len(self.__waitingRequest) > 0 and len(self.__messageQueue) > 0: 
    116116            print "SENDING RESPONSE TO HTTP" 
    117             self.__waitingRequest.callback(self.__messageQueue.pop(0)) 
    118             self.__waitingRequest = None 
     117            d = self.__waitingRequest.pop(0) 
     118            d[1].callback((self.__messageQueue, d[0])) 
     119            self.__messageQueue = [] 
    119120 
    120     def __doResponse(self,resp): 
     121    def __doResponse(self,dat): 
     122        resp,jsoncallback = dat 
    121123        return http.Response(stream= 
    122                 str("%s(%s)" % (self.jsoncallback,resp)), 
     124                str("%s(%s)" % (jsoncallback,encodejson(resp))), 
    123125                headers = {"content-type": MimeType.fromString("text/javascript")}) 
    124126 
    125127    def doRenderStuff(self,nargs): 
    126128        if "jsoncallback" in nargs: 
    127             self.jsoncallback = nargs["jsoncallback"] 
    128             print "json callback set to %s" % self.jsoncallback 
     129            jsoncallback = nargs["jsoncallback"] 
    129130 
    130131        d = defer.Deferred() 
    131132        #yeah, i know we're going to unparse 
    132133        d.addCallback( self.__doResponse ) 
    133         if self.__waitingRequest != None: 
    134             print "WE ALREADY HAVE A REQUEST,WTF" 
    135134        print "ADDING REQUEST" 
    136         self.__waitingRequest = d 
     135        self.__waitingRequest.append( (jsoncallback, d) ) 
    137136 
    138137        if "method" in nargs and not nargs["method"] == "get_update": 
    139            self.dataRecieved(encodejson(nargs)) 
     138            self.dataRecieved(encodejson(nargs)) 
     139 
     140        self.checkWaiting() 
    140141 
    141142