Changeset 10

Show
Ignore:
Timestamp:
02/03/08 11:03:50 (4 years ago)
Author:
mike
Message:

Added async communications

Files:
2 modified

Legend:

Unmodified
Added
Removed
  • holdemtable.py

    r9 r10  
    1212        self.cards = [] 
    1313        self.action_history = [] 
     14        self.status = "need implementing" 
    1415 
    1516    def nextHand(self): 
     
    2526        dat = {"user_id"        : self.user_id, 
    2627               "id"             : self.id, 
    27                "required_action": self.required_action, 
    2828               "cards"          : self.cards} 
    2929        return dat 
     
    4848        self.players = players 
    4949        self.player_array = players.values() 
    50         self.player_array.sort( cmp=lambda x,y: x.seat - y.seat) ) 
     50        self.player_array.sort( cmp=lambda x,y: x.seat - y.seat)  
     51        print self.player_array 
    5152        self.action_on = None 
    5253        self.phase = 0 
     
    6061        self.action_on = 0 
    6162        #rotate the players 
    62         self.player_array = self.player_array.append(self.player_array.pop(0)) 
     63        self.player_array.append(self.player_array.pop(0)) 
    6364        self.phase = 0 
    6465        self.pot = 0.0 
    6566        self.community_cards = [] 
     67        print self.player_array 
    6668        for p in self.player_array: p.nextHand() 
    6769        #deal cards 
    68         for _ in xrange(2): for p in self.player_array: 
    69             p.dealCard(self.deck.deal()) 
     70        for _ in xrange(2): 
     71            for p in self.player_array: 
     72                p.dealCard(self.deck.deal()) 
    7073        return True 
    7174 
     
    8184        return True 
    8285 
     86    def requiredAction( self, player_id): 
     87        self.action_on and player_id == self.player_array[self.action_on].id 
     88 
    8389    #returns possible actions for a player 
    8490    def possibleActions(self, player_id): 
    85         return {} 
     91        if player_id != self.player_array[self.action_on].id: return None 
     92        else: return {} #TODO add stuff here 
    8693 
    8794    def getState(self): 
     
    9299        p_actions = {} 
    93100 
    94         for (n,d) in self.players.items(): 
    95             if p.inHand(): p_actions[n] = d.publicData() 
     101        for (n,p) in self.players.items(): 
     102            if p.inHand(): p_actions[n] = p.publicData() 
    96103        state["player_actions"] = p_actions 
    97104 
     
    102109 
    103110class holdemtable: 
    104     max_players = 4 
     111    max_players = 2 
    105112    def __init__(self, name): 
    106113        self.players={} 
     
    112119 
    113120 
    114     def addPlayer(self, data ): 
     121    def addPlayer(self, data, deferred ): 
    115122        p_id = data['client_id'] 
    116         if self.isFull(): return None 
    117123        self.players[p_id]=player(p_id, data['user_id'], len(self.players)) 
    118         stateChanged() 
    119         return p_id 
    120  
     124        self.addDeferred( p_id, deferred ) 
     125        self.stateChanged("Player Added") 
     126        self.checkStart() 
    121127    #check to see if the game is full and possibly start it 
    122128    def checkStart(self): 
    123129        if self.isFull(): 
    124             self.game_state = holdemround() 
     130            self.game_state = holdemround(self.players) 
    125131            self.game_started = True 
    126             stateChanged() 
     132            self.game_state.nextHand() 
     133            self.stateChanged("Game Starting") 
    127134            return True 
    128135        return False 
     
    136143        root["stat"] = "ok" 
    137144        root["type"] = "game_state" 
    138         root["you"] = self.players[p_id].privateData() 
     145        you = self.players[p_id].privateData() 
     146 
     147        req_action = self.game_started and\ 
     148                     self.game_state.requiredAction(p_id) 
     149 
     150        you["reqired_action"] = req_action 
     151        if req_action: you["possible_actions"] = self.game_state.possibleActions(p_id) 
     152 
     153        root["you"] = you 
    139154 
    140155        table_info = {} 
     
    151166        if self.game_started: 
    152167            root["game_state"] = self.game_state.getState() 
     168        return root 
    153169 
    154170    def addDeferred(self, p_id, deferred): 
     171        print "Adding player id(%s) to deferred" % p_id 
    155172        self.deferred.append((p_id, deferred)) 
    156173 
    157174    #call this when the state changes to update all the deferred 
    158     def stateChanged(self): 
    159         for (p,d) in self.deferred: 
    160             d.callback(self.genStatus(p)) 
     175    def stateChanged(self,action): 
     176        dl = self.deferred[:] 
    161177        self.deferred = [] 
     178        for (p,d) in dl: 
     179            stat = self.genStatus(p) 
     180            stat["action"] = action 
     181            d.callback(stat) 
    162182 
    163183 
  • tabled.py

    r9 r10  
    1313from twisted.internet import defer 
    1414 
    15 tables = {"test_table":holdemtable()} 
     15tables = {"test_table":holdemtable("test_table")} 
    1616 
    1717class PokerTableProtocol(NetstringReceiver): 
     
    4949                    return 
    5050                else: 
    51                     self.id = self.table.addPlayer(decoded) 
     51                    self.id = decoded['client_id'] 
    5252                    d = defer.Deferred() 
    5353                    d.addCallback(self.sendMessage) 
    54                     self.table.addDeferred(self.id, d) 
     54                    self.table.addPlayer(decoded, d) 
    5555            else: 
    5656                self.transport.write( cjson.encode(protocol.MakeError(102,"Unknown Method")) )