コード例 #1
0
ファイル: event.py プロジェクト: Jaeger2305/werewolves-site
    def hold_vote(self):
        parent_game = wwss.game.Game(self.g_id)
        parent_game.change_state("voting")

        callback_handle = IOLoop.current().call_later(8, Event.vote_result, parent_game.g_id, self.e_id)
        self.voting_callback_reference = callback_handler.add_callback(self.e_id, callback_handle)
        self.save()
コード例 #2
0
ファイル: event.py プロジェクト: Jaeger2305/werewolves-site
    def hold_vote(self):
        parent_game = wwss.game.Game(self.g_id)
        parent_game.change_state("voting")

        callback_handle = IOLoop.current().call_later(8, Event.vote_result,
                                                      parent_game.g_id,
                                                      self.e_id)
        self.voting_callback_reference = callback_handler.add_callback(
            self.e_id, callback_handle)
        self.save()
コード例 #3
0
ファイル: game.py プロジェクト: Jaeger2305/werewolves-site
    def remove_player(self, leaving_p_id=None, leaving_player=None):
        try:
            if leaving_p_id:
                leaving_player = self.get_groups([leaving_p_id], expected_count=1)
                log_handler.log(
                    log_type        = "WARNING",
                    log_code        = "Game",
                    log_message     = "If iterating through and deleting players, you must shallow copy it first!",
                    log_detail      = 10,
                    context_id      = self.g_id
                )
            else:
                leaving_p_id = leaving_player.p_id
                leaving_player = self.get_groups([leaving_p_id], expected_count=1)
        except AssertionError:
            log_handler.log(
                log_type        = "ERROR",
                log_code        = "Game",
                log_message     = "Couldn't find exactly one player with p_id "+leaving_p_id+" in this game",
                log_detail      = 3,
                context_id      = self.g_id
            )
            return

        for ingame_player in self.get_players():
            if leaving_player != ingame_player:
                leaving_player.lose_info(None, info_player=ingame_player, lose_all=True)
                ingame_player.lose_info(None, info_player=leaving_player, lose_all=True)

        while leaving_p_id in self.players:
            self.players.remove(leaving_p_id)

        leaving_player.leave_game()

        log_handler.log(
            log_type        = "INFO",
            log_code        = "Game",
            log_message     = "Player ("+leaving_p_id+") has beem removed from this game",
            log_detail      = 5,
            context_id      = self.g_id
        )

        log_handler.log(
            log_type        = "INFO",
            log_code        = "Player",
            log_message     = "This player has left the game ("+self.g_id+")",
            log_detail      = 4,
            context_id      = leaving_p_id
        )

        # if there are no players left, initiate countdown for redis cleanup, unless there's already a callback for its deletion
        if len(self.players) == 0 and not hasattr(self, 'redis_cleanup_callback_reference') or (hasattr(self, 'redis_cleanup_callback_reference') and not self.redis_cleanup_callback_reference):
            callback_handle = IOLoop.current().call_later(10, self.redis_cleanup)  # self works here because the data the cleanup needs should not change
            self.redis_cleanup_callback_reference = callback_handler.add_callback(self.g_id, callback_handle)

            log_handler.log(
                log_type        = "INFO",
                log_code        = "Redis",
                log_message     = "Initiating game deletion in 10 seconds",
                log_detail      = 5,
                context_id      = self.g_id
            )

        self.save()