Changeset 26
- Timestamp:
- 02/04/08 20:13:25 (4 years ago)
- Files:
-
- 1 added
- 2 modified
-
tabled.py (modified) (11 diffs)
-
web/client.html (modified) (1 diff)
-
web/js/poker-client.js (added)
Legend:
- Unmodified
- Added
- Removed
-
tabled.py
r24 r26 8 8 import getopt 9 9 import cjson 10 import simplejson 10 11 from twisted.internet.protocol import Factory 11 12 from twisted.internet import reactor … … 13 14 from twisted.internet import defer 14 15 from twisted.web2 import server, http, resource, channel 16 from twisted.web2.http_headers import Headers, MimeType 15 17 18 encodejson = simplejson.dumps 19 decodejson = simplejson.loads 16 20 tables = {} 17 21 class BasePokerTableHandler: … … 22 26 def sendMessage(self, data): 23 27 try: 24 self.sendMessageViaTransport( cjson.encode(data) )28 self.sendMessageViaTransport( encodejson(data) ) 25 29 except cjson.EncodeError,e: 26 30 print data … … 36 40 def dataRecieved(self,line): 37 41 try: 38 decoded = cjson.decode(line)42 decoded = decodejson(line) 39 43 if decoded == None or "method" not in decoded: 40 self.sendMessageViaTransport( cjson.encode(44 self.sendMessageViaTransport( encodejson( 41 45 protocol.MakeError(101,"Messages must contain methods")) ) 42 46 return … … 44 48 if method == "connect": 45 49 if self.table or self.id: 46 self.sendMessageViaTransport( cjson.encode(50 self.sendMessageViaTransport( encodejson( 47 51 protocol.MakeError(103,"Already connected")) ) 48 52 return … … 54 58 self.table = tables[table_name] 55 59 if self.table.isFull(): 56 self.sendMessageViaTransport( cjson.encode(60 self.sendMessageViaTransport( encodejson( 57 61 protocol.MakeError(104,"Table is full"))) 58 62 return … … 67 71 self.table.action(self.id, decoded["action"],value) 68 72 else: 69 self.sendMessageViaTransport( cjson.encode(protocol.MakeError(102,"Unknown Method")) ) 70 print method 73 self.sendMessageViaTransport( encodejson(protocol.MakeError(102,"Unknown Method")) ) 71 74 except cjson.DecodeError: 72 self.send String( cjson.encode(protocol.MakeError( 100, "Message must be in JSON")) )75 self.sendMessageViaTransport( encodejson(protocol.MakeError( 100, "Message must be in JSON")) ) 73 76 print line 74 77 return … … 96 99 self.__waitingRequest=None 97 100 self.__messageQueue=[] 101 self.jsoncallback = None 98 102 99 103 def sendMessageViaTransport(self, data): 100 104 self.__messageQueue.append(data) 101 self.checkWaiting() 105 #for json callbacks 106 #else: self.__messageQueue.append(str("%s(%s)" % (self.jsoncallback, data))) 102 107 103 108 def sendMessage(self, data): … … 105 110 data["token"] = makeToken( self.id, self.table.name ) 106 111 BasePokerTableHandler.sendMessage(self,data) 112 self.checkWaiting() 107 113 108 114 def checkWaiting(self): 109 115 if self.__waitingRequest != None and len(self.__messageQueue) > 0: 116 print "SENDING RESPONSE TO HTTP" 110 117 self.__waitingRequest.callback(self.__messageQueue.pop(0)) 111 118 self.__waitingRequest = None 112 119 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 113 125 def doRenderStuff(self,nargs): 126 if "jsoncallback" in nargs: 127 self.jsoncallback = nargs["jsoncallback"] 128 print "json callback set to %s" % self.jsoncallback 129 114 130 d = defer.Deferred() 115 131 #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" 117 136 self.__waitingRequest = d 118 137 119 138 if "method" in nargs and not nargs["method"] == "get_update": 120 self.dataRecieved( cjson.encode(nargs))139 self.dataRecieved(encodejson(nargs)) 121 140 122 self.checkWaiting()123 141 124 142 return d … … 132 150 self.__webHandlers = {} 133 151 134 135 136 137 152 def render(self, ctx): 138 153 nargs = {} 139 154 for k,v in ctx.args.items(): nargs[k] = v[0] 155 handler = None 140 156 print nargs 141 handler = None 157 158 159 142 160 if "token" in nargs: handler = self.__webHandlers[nargs["token"]] 143 161 elif "method" in nargs and nargs["method"] == "connect": … … 145 163 handler = PokerTableWebHandler() 146 164 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"))) 148 166 149 167 return handler.doRenderStuff(nargs) -
web/client.html
r25 r26 3 3 <title>Mike's Poker Client</title> 4 4 </head> 5 <script type="text/javascript" src="js/jquery-1.2.2.js"></script> 6 <script type="text/javascript" src="js/poker-client.js"></script> 5 7 <body> 6 <form>Connect to: 7 <table><tr><td>host:</td> 8 <form id="connect_form">Connect to: 9 <table> 10 <tr><td>host:</td><td><input name="host" value="http://localhost:8080" type="input"/></td></tr> 11 <tr><td>login:</td><td><input name="user_id" value="guest" type="input"/></td></tr> 12 <tr><td>player name:</td><td><input name="client_id" value="" type="input"/></td></tr> 13 <tr><td>game name:</td><td><input name="table_name" value="" type="input"/></td></tr> 14 <tr><td></td><td><input id="connect" value="connect" type="submit"/></td></tr> 15 </table> 16 </form> 17 <div id="status"> 18 19 </div> 8 20 </body> 9 21 </html>
