Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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)