示例#1
0
def decline_game(client, msg):
    if len(msg) == 2:
        requester = msg[1]
        del requests[requester]
        if players_statuses[requester] == "READY":
            opponent_connection = find_connection(requester)
            tcp_server.send_msg(
                find_connection(requester), connections[client] +
                " didn’t accept the request or is busy \n")
    else:
        tcp_server.send_msg(
            client, "Please introduce a valid Decline <username> request  \n")
示例#2
0
def register_new_player(client, msg):
    if len(msg) != 3 or msg[1].lower() != 'am' or msg[2] == '':
        tcp_server.send_msg(client, "Invalid format!\n")
    elif client in connections:
        tcp_server.send_msg(client, "Already registered!\n")
    elif msg[2] in connections.values():
        tcp_server.send_msg(client, "Repeated username\n")
    else:
        username = msg[2]
        msg_to_client = "HELLO " + username + "\n"
        connections[client] = username
        players_statuses[username] = "READY"
        tcp_server.send_msg(client, msg_to_client)
示例#3
0
def next_turn(current_game):
    current_game.change_turn()
    if current_game.active == current_game.opponent_username:
        tcp_server.send_msg(
            current_game.requester_connection,
            "\n" + current_game.opponent_username + "'s turn \n")
        tcp_server.send_msg(current_game.opponent_connection, "\nYour turn \n")
    else:
        tcp_server.send_msg(
            current_game.opponent_connection,
            "\n" + current_game.requester_username + "'s turn \n")
        tcp_server.send_msg(current_game.requester_connection,
                            "\nYour turn \n")
示例#4
0
def client_handler(client: socket.socket):
    logic.menu(client)
    while True:
        msg = tcp_server.recv_msg(client)
        if client is None:
            return
        if msg is not None:
            msg = msg.split()

        # Validate Command
        if logic.validate_command(msg):
            tcp_server.send_msg(client, logic.error_msg_prefix + "Invalid command")
            continue
        # Validate Registry
        if logic.validate_registration(client, msg) and 'exit' not in msg:
            tcp_server.send_msg(client, logic.error_msg_prefix + "Please register first. \n")
            continue
        # Then execute game action

        try:
            threading.Thread(target=logic.commands_handler.get(msg[0].lower()), args=(client, msg,)).start()
        except:
            if client is None or client.fileno() == -1:
                break
            tcp_server.send_msg(client, "There was a problem procesing your request\n")
示例#5
0
def logout(client, msg):
    if client not in connections:
        tcp_server.send_msg(client, "Bye")
        tcp_server.close_connection(client)
        return
    if connections[client] and players_statuses[
            connections[client]] == "READY":
        tcp_server.send_msg(client, "Bye " + connections[client])
        del players_statuses[connections[client]]
        del connections[client]
        tcp_server.close_connection(client)
    else:
        tcp_server.send_msg(client,
                            error_msg_prefix + "Can't exit while in a game \n")
示例#6
0
def request_new_game(client, msg):
    if len(msg) == 2:
        opponent = msg[1]
        if opponent == connections[client]:
            tcp_server.send_msg(client, "Cannot play against you!\n")
            return
        if not opponent in players_statuses:
            tcp_server.send_msg(client, opponent + " not found.\n")
            return
        if players_statuses[opponent] != "READY":
            tcp_server.send_msg(
                client, opponent + " didn’t accept the request or is busy.\n")
            return
        opponent_connection = find_connection(opponent)
        if opponent_connection is None:
            tcp_server.send_msg(
                client, opponent + " didn’t accept the request or is busy.\n")
            return
        requests[connections[client]] = opponent
        tcp_server.send_msg(client, "waiting " + opponent + " response…")
        tcp_server.send_msg(find_connection(opponent),
                            connections[client] + " wants to play!")
    else:
        tcp_server.send_msg(
            client, "Please introduce a valid Play <username> request  \n")
示例#7
0
def get_players_list(client, msg):
    tcp_server.send_msg(client, parse_dic(players_statuses))
示例#8
0
def check_status(client, msg):
    tcp_server.send_msg(client, "OK " + connections[client] + "\n")
示例#9
0
def menu(client):
    tcp_server.send_msg(client, welcome_message)
    tcp_server.send_msg(client, menu_commands)
示例#10
0
def new_move(client, msg):
    if len(msg) == 3:
        row = int(msg[1]) - 1
        col = int(msg[2]) - 1
        if games[client]:
            current_game = games[client]
            if current_game.active == connections[client]:
                if 0 <= row <= 2 and 0 <= col <= 2 and current_game.board[row][
                        col] == ' ':
                    current_game.board[row][col] = current_game.symbols[
                        current_game.active]
                    current_game.moves += 1
                    show_board(current_game)
                    if 5 <= current_game.moves <= 9:
                        winner = verify_winner(current_game)
                        if winner is not None:
                            winner_username = current_game.username_by_symbol(
                                winner)
                            tcp_server.send_msg(
                                current_game.requester_connection,
                                "Game over! " + winner_username + " wins\n")
                            tcp_server.send_msg(
                                current_game.opponent_connection,
                                "Game over! " + winner_username + " wins\n")
                            reset_game(current_game)
                            return
                        elif current_game.moves == 9:
                            tcp_server.send_msg(
                                current_game.requester_connection,
                                "It's a tie \n")
                            tcp_server.send_msg(
                                current_game.opponent_connection,
                                "It's a tie \n")
                            reset_game(current_game)
                            return
                    next_turn(current_game)
                else:
                    tcp_server.send_msg(client, "Invalid play \n")
            else:
                tcp_server.send_msg(client, "Please wait for your turn \n")
        else:
            tcp_server.send_msg(client, "Not enrolled in a game \n")
    else:
        tcp_server.send_msg(client,
                            "Please introduce a valid <row><column> move \n")
示例#11
0
def show_board(current_game: Game):
    tcp_server.send_msg(current_game.requester_connection,
                        board_str(current_game.board))
    tcp_server.send_msg(current_game.opponent_connection,
                        board_str(current_game.board))
示例#12
0
def accept_game(client, msg):
    if len(msg) == 2:
        requester = msg[1]
        if requests[requester] != connections[client]:
            tcp_server.send_msg(
                client, requester + " didn’t accept the request or is busy.\n")
        if players_statuses[requester] != "READY":
            tcp_server.send_msg(
                client, requester + " didn’t accept the request or is busy.\n")
        opponent_connection = find_connection(requester)
        if opponent_connection is None:
            tcp_server.send_msg(
                client, requester + " didn’t accept the request or is busy.\n")
        players_statuses[connections[client]] = "BUSY"
        players_statuses[requester] = "BUSY"
        del requests[requester]
        tcp_server.send_msg(
            client, "Game against " + requester + " is about to start!\n")
        tcp_server.send_msg(
            find_connection(requester),
            "Game against " + connections[client] + " is about to start!")
        start_game(client, requester)
    else:
        tcp_server.send_msg(
            client, "Please introduce a valid Accept <username> request  \n")