def initGame(self): """ask clients if they are ready to start""" game = self.preparedGame game.saveNewGame() block = DeferredBlock(self) for player in game.players: block.tellPlayer(player, Message.ReadyForGameStart, tableid=self.tableid, gameid=game.gameid, shouldSave=player.shouldSave, wantedGame=game.wantedGame, source=list((x.wind, x.name) for x in game.players)) block.callback(self.startGame)
def initGame(self): """ask clients if they are ready to start""" game = self.game game.saveStartTime() block = DeferredBlock(self) for player in game.players: block.tellPlayer(player, Message.ReadyForGameStart, tableid=self.tableid, gameid=game.gameid, shouldSave=player.shouldSave, wantedGame=game.wantedGame, playerNames=list( (x.wind, x.name) for x in game.players)) block.callback(self.startGame)
def proposeGameId(self, gameid): """server proposes an id to the clients ands waits for answers""" while True: with Transaction(): query = Query('insert into game(id,seed) values(?,?)', list([gameid, 'proposed']), mayFail=True) if query.success: break gameid += random.randrange(1, 100) block = DeferredBlock(self) for player in self.preparedGame.players: if player.shouldSave and isinstance(player.remote, User): # do not ask robot players, they use the server data base block.tellPlayer(player, Message.ProposeGameId, gameid=gameid) block.callback(self.collectGameIdAnswers, gameid)
def proposeGameId(self, gameid): """server proposes an id to the clients ands waits for answers""" while True: query = Query('insert into game(id,seed) values(?,?)', (gameid, 'proposed'), mayFail=True, failSilent=True) if not query.failure: break gameid += random.randrange(1, 100) block = DeferredBlock(self) for player in self.game.players: if player.shouldSave and isinstance(self.remotes[player], User): # do not ask robot players, they use the server data base block.tellPlayer(player, Message.ProposeGameId, gameid=gameid) block.callback(self.collectGameIdAnswers, gameid)
def divided(self, dummyResults=None): """the wall is now divided for all clients""" if not self.game: return block = DeferredBlock(self) for clientPlayer in self.game.players: allPlayerTiles = [] for player in self.game.players: bonusTileNames = tuple(x.element for x in player.bonusTiles) if player == clientPlayer or self.game.playOpen: playerTiles = player.concealedTileNames else: playerTiles = ('Xy',) * 13 allPlayerTiles.append((player.name, playerTiles + bonusTileNames)) block.tellPlayer(clientPlayer, Message.SetConcealedTiles, source=allPlayerTiles) block.callback(self.dealt)
def pickTile(self, dummyResults=None, deadEnd=False): """the active player gets a tile from wall. Tell all clients.""" if not self.game: return player = self.game.activePlayer try: tile = player.pickedTile(deadEnd) except WallEmpty: self.endHand() else: tileName = tile.element self.game.lastDiscard = None block = DeferredBlock(self) block.tellPlayer(player, Message.PickedTile, source=tileName, deadEnd=deadEnd) if tileName[0] in 'fy' or self.game.playOpen: block.tellOthers(player, Message.PickedTile, source=tileName, deadEnd=deadEnd) else: block.tellOthers(player, Message.PickedTile, source= 'Xy', deadEnd=deadEnd) block.callback(self.moved)
def pickTile(self, dummyResults=None, deadEnd=False): """the active player gets a tile from wall. Tell all clients.""" if not self.running: return player = self.game.activePlayer try: tile = player.pickedTile(deadEnd) except WallEmpty: self.endHand() else: self.game.lastDiscard = None block = DeferredBlock(self) block.tellPlayer(player, Message.PickedTile, tile=tile, deadEnd=deadEnd) showTile = tile if tile.isBonus or self.game.playOpen else Tile.unknown block.tellOthers(player, Message.PickedTile, tile=showTile, deadEnd=deadEnd) block.callback(self.moved)