Exemplo n.º 1
0
async def handle_error(user_id):
    # player with user_id disconnected or error happened
    try:
        global_playground.unregister(user_id)
    except NotRegistered:
        pass
    except NotIdleException:
        player = global_playground.player(user_id)
        if player.is_waiting():
            # there is entry, there is no game
            global_playground.remove_entry(user_id)
            global_playground.unregister(user_id)
        elif player.is_playing():
            # there is game, there is no entry
            opp_id = player.opp.player_id
            game = player.game
            result = "first_win" if player.side == "second" else "second_win"
            await send_command(
                GameOverCommand(opp_id,
                                result=result,
                                win_pos=None,
                                cause="interruption"))

            game.set_result(result)
            await add_game_to_db(game)
            game.clear()
            global_playground.unregister(user_id)
    finally:
        registry.remove_socket(user_id)
Exemplo n.º 2
0
async def execute_accept_handler(
        cmd: AcceptCommand) -> List[Optional[Command]]:
    logging.info(f"Handling 'accept' command, user_id : {str(cmd)}")
    res_commands = []
    player = global_playground.player(cmd.user_id)
    if player.is_playing():
        game = player.game
        if game.can_accept is player:
            # fix the draw
            game.set_result('draw')
            opp_id = player.opp.player_id
            res_commands.append(
                GameOverCommand(cmd.user_id,
                                result='draw',
                                win_pos=None,
                                cause='agreement'))
            res_commands.append(
                GameOverCommand(opp_id,
                                result='draw',
                                win_pos=None,
                                cause='agreement'))

            # save game to db
            await add_game_to_db(game)
            game.clear()
        else:
            res_commands.append(
                ErrorCommand(cmd.user_id, msg='Cannot accept, no offer'))
    else:
        res_commands.append(
            ErrorCommand(cmd.user_id,
                         msg='Draw accept rejected, no current game'))
    return res_commands
Exemplo n.º 3
0
async def resign_game(uid):
    game = None
    player = global_playground.player(uid)
    if player.is_playing():
        game = player.game
        result = "first_win" if player.side == "second" else "second_win"
        game.set_result(result)
        await add_game_to_db(game)
    return game
Exemplo n.º 4
0
async def new_move(uid: str, data: Dict) -> Optional[Game]:
    game = None
    player = global_playground.player(uid)
    if player.is_playing():
        game = player.game
        game.set_new_move(Move.create_move(player.side, data['parameters']['square'],
                                           data['parameters']['vertical'], data['parameters']['horizontal']))
        game.update_result()
        if game.is_finished():
            # save game to db
            await add_game_to_db(game)
    return game
Exemplo n.º 5
0
async def execute_offer_handler(cmd: OfferCommand) -> List[Optional[Command]]:
    logging.info(f"Handling 'offer' command: {str(cmd)}")
    res_commands = []
    player = global_playground.player(cmd.user_id)
    if player.is_playing():
        game = player.game
        game.set_draw_offer(player.opp)
        opp_id = player.opp.player_id
        res_commands.append(OfferedCommand(opp_id))
    else:
        res_commands.append(
            ErrorCommand(cmd.user_id,
                         msg='Draw offer rejected, no current game'))
    return res_commands
Exemplo n.º 6
0
async def add_new_entry(uid, data):
    player = global_playground.player(uid)
    entry = Entry(player)
    global_playground.add_entry(entry)