Changeset 26 for tabled.py

Show
Ignore:
Timestamp:
02/04/08 20:13:25 (4 years ago)
Author:
mike
Message:

Got some stuff working for the web client

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • tabled.py

    r24 r26  
    88import getopt 
    99import cjson 
     10import simplejson 
    1011from twisted.internet.protocol import Factory 
    1112from twisted.internet import reactor 
     
    1314from twisted.internet import defer 
    1415from twisted.web2 import server, http, resource, channel 
     16from twisted.web2.http_headers import Headers, MimeType 
    1517 
     18encodejson = simplejson.dumps 
     19decodejson = simplejson.loads 
    1620tables = {} 
    1721class BasePokerTableHandler: 
     
    2226    def sendMessage(self, data): 
    2327        try: 
    24             self.sendMessageViaTransport( cjson.encode(data) ) 
     28            self.sendMessageViaTransport( encodejson(data) ) 
    2529        except cjson.EncodeError,e: 
    2630            print data 
     
    3640    def dataRecieved(self,line): 
    3741        try: 
    38             decoded = cjson.decode(line) 
     42            decoded = decodejson(line) 
    3943            if decoded == None or "method" not in decoded: 
    40                 self.sendMessageViaTransport( cjson.encode( 
     44                self.sendMessageViaTransport( encodejson( 
    4145                    protocol.MakeError(101,"Messages must contain methods")) ) 
    4246                return 
     
    4448            if method == "connect": 
    4549                if self.table or self.id: 
    46                     self.sendMessageViaTransport( cjson.encode( 
     50                    self.sendMessageViaTransport( encodejson( 
    4751                        protocol.MakeError(103,"Already connected")) ) 
    4852                    return 
     
    5458                self.table = tables[table_name] 
    5559                if self.table.isFull(): 
    56                     self.sendMessageViaTransport( cjson.encode( 
     60                    self.sendMessageViaTransport( encodejson( 
    5761                        protocol.MakeError(104,"Table is full"))) 
    5862                    return 
     
    6771                self.table.action(self.id, decoded["action"],value) 
    6872            else: 
    69                 self.sendMessageViaTransport( cjson.encode(protocol.MakeError(102,"Unknown Method")) ) 
    70             print method 
     73                self.sendMessageViaTransport( encodejson(protocol.MakeError(102,"Unknown Method")) ) 
    7174        except cjson.DecodeError: 
    72             self.sendString( cjson.encode(protocol.MakeError( 100, "Message must be in JSON")) ) 
     75            self.sendMessageViaTransport( encodejson(protocol.MakeError( 100, "Message must be in JSON")) ) 
    7376            print line 
    7477            return 
     
    9699        self.__waitingRequest=None 
    97100        self.__messageQueue=[] 
     101        self.jsoncallback = None 
    98102 
    99103    def sendMessageViaTransport(self, data): 
    100104        self.__messageQueue.append(data) 
    101         self.checkWaiting() 
     105        #for json callbacks 
     106        #else: self.__messageQueue.append(str("%s(%s)" % (self.jsoncallback, data))) 
    102107 
    103108    def sendMessage(self, data): 
     
    105110        data["token"] = makeToken( self.id, self.table.name ) 
    106111        BasePokerTableHandler.sendMessage(self,data) 
     112        self.checkWaiting() 
    107113 
    108114    def checkWaiting(self): 
    109115        if self.__waitingRequest != None and len(self.__messageQueue) > 0: 
     116            print "SENDING RESPONSE TO HTTP" 
    110117            self.__waitingRequest.callback(self.__messageQueue.pop(0)) 
    111118            self.__waitingRequest = None 
    112119 
     120    def __doResponse(self,resp): 
     121        return http.Response(stream= 
     122                str("%s(%s)" % (self.jsoncallback,resp)), 
     123                headers = {"content-type": MimeType.fromString("text/javascript")}) 
     124 
    113125    def doRenderStuff(self,nargs): 
     126        if "jsoncallback" in nargs: 
     127            self.jsoncallback = nargs["jsoncallback"] 
     128            print "json callback set to %s" % self.jsoncallback 
     129 
    114130        d = defer.Deferred() 
    115131        #yeah, i know we're going to unparse 
    116         d.addCallback( lambda resp: http.Response(stream=resp) ) 
     132        d.addCallback( self.__doResponse ) 
     133        if self.__waitingRequest != None: 
     134            print "WE ALREADY HAVE A REQUEST,WTF" 
     135        print "ADDING REQUEST" 
    117136        self.__waitingRequest = d 
    118137 
    119138        if "method" in nargs and not nargs["method"] == "get_update": 
    120            self.dataRecieved(cjson.encode(nargs)) 
     139           self.dataRecieved(encodejson(nargs)) 
    121140 
    122         self.checkWaiting() 
    123141 
    124142        return d 
     
    132150        self.__webHandlers = {} 
    133151 
    134  
    135         
    136  
    137152    def render(self, ctx): 
    138153        nargs = {} 
    139154        for k,v in ctx.args.items(): nargs[k] = v[0] 
     155        handler = None 
    140156        print nargs 
    141         handler = None 
     157 
     158 
     159 
    142160        if "token" in nargs: handler =  self.__webHandlers[nargs["token"]] 
    143161        elif "method" in nargs and nargs["method"] == "connect": 
     
    145163            handler = PokerTableWebHandler() 
    146164            self.__webHandlers[token] = handler 
    147         else: return http.Response(stream=cjson.encode(protocol.error(200,"Require either token or connect"))) 
     165        else: return http.Response(stream=encodejson(protocol.error(200,"Require either token or connect"))) 
    148166 
    149167        return handler.doRenderStuff(nargs)