Exemple #1
0
def register() -> FlaskResponse:
    try:
        register_req = RegisterRequest.from_request(request)
    except (TypeError, ValueError) as e:
        return error(f'Failed to parse register request: {e}', status=400)

    if not register_req.address:
        return error('No client address provided', status=400)
    if not register_req.player_id:
        return error('No player ID provided', status=400)
    if not register_req.nick and register_req.player_id not in game.players:
        return error('No nickname provided', status=400)
    if is_invalid_nick(register_req.nick, register_req.player_id):
        return error(f'Nickname {register_req.nick} is already in use',
                     status=400)
    if len(register_req.nick) > MAX_NICK_LENGTH:
        return error(
            f'Maximum nickname length is {MAX_NICK_LENGTH} characters',
            status=400)

    # ping the client to make sure it's up
    resp = requests.get(f'http://{register_req.address}/id')
    if resp.ok and resp.text == register_req.player_id:
        game.register_player(register_req)
        print(
            f'Added player {register_req.player_id} ({register_req.address})')
        return no_content()
    print(
        f'Failed to add player {register_req.player_id} ({register_req.address})'
    )
    return error('Failed to connect to client')
Exemple #2
0
 def notify(self):
     try:
         event = Event.from_request(request)
     except (TypeError, ValueError) as e:
         return error(f'Failed to parse event: {e}')
     try:
         self.event_handler.handle(event)
     except Exception:
         print('Caught exception handling event')
         print('Event:', str(event))
         traceback.print_exc()
     return no_content()
Exemple #3
0
def change_nick() -> FlaskResponse:
    player_id = get_player_id()
    if player_id not in game.players or not game.players[player_id].is_active:
        return error('Cannot change nickname for an inactive player',
                     status=400)
    new_nick = request.get_data(as_text=True).strip()
    if not new_nick:
        return error('No nickname provided', status=400)
    if is_invalid_nick(new_nick, player_id):
        return error(f'Nickname {new_nick} is already in use', status=400)
    if len(new_nick) > MAX_NICK_LENGTH:
        return error(
            f'Maximum nickname length is {MAX_NICK_LENGTH} characters',
            status=400)
    if new_nick != game.players[player_id].nick:
        game.change_nick(new_nick)
    return no_content()
Exemple #4
0
 def root():
     return no_content()
Exemple #5
0
def start_game() -> FlaskResponse:
    try:
        game.start()
    except RuntimeError as e:
        return error(str(e))
    return no_content()
Exemple #6
0
def goodbye() -> FlaskResponse:
    player_id = get_player_id()
    game.remove_player(player_id)
    print(f'Removed player {player_id}')
    return no_content()
Exemple #7
0
def chat() -> FlaskResponse:
    game.post_chat_message(request.get_data(as_text=True))
    return no_content()