diff options
author | Olivier Gayot <duskcoder@gmail.com> | 2015-06-27 15:37:56 +0200 |
---|---|---|
committer | Olivier Gayot <duskcoder@gmail.com> | 2015-06-27 16:43:42 +0200 |
commit | 8e06063d55d16207eed11ceaeb6a5f32bf4e7b4c (patch) | |
tree | 9887760596e43b476484c5ef286d09d487362a2a /CAO | |
parent | 34f3ab900a9cac78acb7a10d1ed60555d98ff822 (diff) |
handle the disconnection of the judge
in case the judge disconnects, we give back the played cards to the
players and they are demanded to elect a new one
Signed-off-by: Olivier Gayot <duskcoder@gmail.com>
Diffstat (limited to 'CAO')
-rw-r--r-- | CAO/Client.py | 2 | ||||
-rw-r--r-- | CAO/Game.py | 31 |
2 files changed, 31 insertions, 2 deletions
diff --git a/CAO/Client.py b/CAO/Client.py index 03bb68d..2d0bbac 100644 --- a/CAO/Client.py +++ b/CAO/Client.py @@ -70,4 +70,4 @@ class Client(): def disconnect(self): if self.player is not None: - self.player.client = None + self.game.disconnect(self.player) diff --git a/CAO/Game.py b/CAO/Game.py index 917c055..63f52eb 100644 --- a/CAO/Game.py +++ b/CAO/Game.py @@ -165,7 +165,7 @@ class Game(): p.set_has_played(False) self.board.recycle_black_card() - self.judge = None # useful or not ... + self.judge = None for p in self.players: if p is not player: @@ -204,3 +204,32 @@ class Game(): return cao_success(self.black_desc[card]) return cao_error('The black card has not been revealed yet') + + def disconnect(self, player): + player.client = None + + if self.judge is player: + self.board.recycle_black_card() + self.judge = None + + for p in self.players: + p.send_notification({'op': 'judge_needed'}) + + for card, p in self.board.played_cards: + idx = p.receive_card(card) + card_idx = p.cards[idx] + card_desc = self.white_desc[card_idx] + + p.send_notification({ + 'op': 'received_card', + 'content': { + 'card': { + 'id': idx, + 'desc': card_desc, + }, + }, + }) + p.set_has_played(False) + + self.board.played_cards = [] + self.state = self.WAITING_NEW_JUDGE |