예제 #1
0
    def vote_result(g_id, e_id):
        parent_game = wwss.game.Game(g_id)
        voting_event = Event.load(g_id, e_id)
        callback_handler.remove_callback(voting_event.e_id, voting_event.voting_callback_reference)

        if voting_event.votes:
            p_id_most_common = Counter(voting_event.votes).most_common(1)

            log_type = "INFO"
            log_code = "Event"
            log_message = "Most common vote was" + p_id_most_common
            log_detail = 5
            context_id = self.e_id

            log_handler.log(
                log_type=log_type,
                log_code=log_code,
                log_message=log_message,
                log_detail=log_detail,
                context_id=context_id,
            )

            voting_event.result_subjects = [p_id_most_common]
        else:
            shuffle(voting_event.subjects)

            log_type = "INFO"
            log_code = "Event"
            log_message = "No votes were given, a random choice has been selected: " + voting_event.subjects[0]
            log_detail = 5
            context_id = e_id

            log_handler.log(
                log_type=log_type,
                log_code=log_code,
                log_message=log_message,
                log_detail=log_detail,
                context_id=context_id,
            )

            voting_event.result_subjects = [voting_event.subjects[0]]

        parent_game.change_state("finished_voting")
        voting_event.save()
        voting_event.finish_event()
        return
예제 #2
0
    def vote_result(g_id, e_id):
        parent_game = wwss.game.Game(g_id)
        voting_event = Event.load(g_id, e_id)
        callback_handler.remove_callback(
            voting_event.e_id, voting_event.voting_callback_reference)

        if voting_event.votes:
            p_id_most_common = Counter(voting_event.votes).most_common(1)

            log_type = "INFO"
            log_code = "Event"
            log_message = "Most common vote was" + p_id_most_common
            log_detail = 5
            context_id = self.e_id

            log_handler.log(log_type=log_type,
                            log_code=log_code,
                            log_message=log_message,
                            log_detail=log_detail,
                            context_id=context_id)

            voting_event.result_subjects = [p_id_most_common]
        else:
            shuffle(voting_event.subjects)

            log_type = "INFO"
            log_code = "Event"
            log_message = "No votes were given, a random choice has been selected: " + voting_event.subjects[
                0]
            log_detail = 5
            context_id = e_id

            log_handler.log(log_type=log_type,
                            log_code=log_code,
                            log_message=log_message,
                            log_detail=log_detail,
                            context_id=context_id)

            voting_event.result_subjects = [voting_event.subjects[0]]

        parent_game.change_state("finished_voting")
        voting_event.save()
        voting_event.finish_event()
        return
예제 #3
0
    def redis_cleanup(self):
        # players might need updating just to be doubly sure!!
        if hasattr(self, 'redis_cleanup_callback_reference') and self.redis_cleanup_callback_reference:
            callback_handler.remove_callback(self.g_id, self.redis_cleanup_callback_reference)
            self.redis_cleanup_callback_reference = None

        ww_redis_db.delete("g_list:"+self.g_id)

        for e_id in self.event_history:
            ww_redis_db.delete("event:"+e_id)

        for e_id in self.event_queue:
            ww_redis_db.delete("event:"+e_id)

        log_handler.log(
            log_type        = "INFO",
            log_code        = "Redis",
            log_message     = "Events and game has been removed from redis",
            log_detail      = 3,
            context_id      = self.g_id
        )
예제 #4
0
    def add_player(self, joining_p_id=None, joining_player=None):
                                                            ############################################################
                                                            # Initialise player object
                                                            ############################################################
        if joining_p_id:
            joining_player = user.Player(p_id=joining_p_id)
        elif joining_player:
            joining_p_id = joining_player.p_id
        else:
            raise ValueError
                                                            ############################################################
                                                            # Return immediately if the player is already in a game
                                                            ############################################################
        if joining_player.is_ingame():
            log_handler.log(
                log_type        = "ERROR.",
                log_code        = "Player",
                log_message     = "Player: " + joining_player.p_id + "is already in a game: "+ joining_player.g_id,
                log_detail      = 4,
                context_id      = self.g_id
            )
            return
                                                            ############################################################
                                                            # If game was empty and has been scheduled for cleanup,
                                                            # remove the cleanup callback
                                                            ############################################################
        if hasattr(self, 'redis_cleanup_callback_reference') and self.redis_cleanup_callback_reference:
            callback_handler.remove_callback(self.g_id, self.redis_cleanup_callback_reference)
            self.redis_cleanup_callback_reference = None
            log_handler.log(
                log_type        = "INFO",
                log_code        = "Callbacks",
                log_message     = "Preventing game deletion",
                log_detail      = 5,
                context_id      = self.g_id
            )

        if joining_p_id not in self.players:
            self.players.append(joining_p_id)
            self.save() # all changes to the game must be immediately saved! otherwise due to call stacks, this would overwrite the new changes. You could pass by reference, but probably better to call load from redis again

                                                            ############################################################
                                                            # Update known information for all players in the game
                                                            ############################################################
            for ingame_player in self.get_players():
                if joining_player != ingame_player:
                    # give ingame player information about joining player
                    ingame_player.gain_info(['p_id', 'name'], info_player=joining_player)

                    # give joining player information about ingame_players
                    joining_player.gain_info(['p_id', 'name'], info_player=ingame_player)

                                                            ############################################################
                                                            # Save changes for player
                                                            ############################################################
        joining_player.join_game(self.g_id)

        log_handler.log(
            log_type        = "INFO",
            log_code        = "Game",
            log_message     = "Player ("+joining_p_id+") has been added to the game",
            log_detail      = 5,
            context_id      = self.g_id
        )
                                                            ############################################################
                                                            # Check game if game is full, if so begin
                                                            ############################################################
        if len(self.players) >= self.config['max_players']:
            log_handler.log(
                log_type        = "INFO",
                log_code        = "Game",
                log_message     = "Game full, starting now",
                log_detail      = 2,
                context_id      = self.g_id
            )

            self.change_state("ready", "starting game in 3 secs")
            IOLoop.current().call_later(3, self.start_game)     # for production/give a delay

        self.save()