From a4c855cc2c95fbd68bb95bdbc15e6cf15bc0f0c0 Mon Sep 17 00:00:00 2001 From: Giovani Date: Thu, 1 Jul 2021 13:51:34 -0400 Subject: [PATCH] feat: add exit game event and improve enter game --- main.py | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/main.py b/main.py index e4070c2..38318fc 100644 --- a/main.py +++ b/main.py @@ -7,43 +7,60 @@ import json import websockets GAMES = {} - # EVENT RESPONSES -def wait_for_player_response(): - return json.dump({"type": "wait_for_player"}) +def wait_for_opponent_response(): + return json.dumps({"type": "wait_for_opponent"}) def start_game_response(): - return json.dump({"type": "start_game"}) + return json.dumps({"type": "start_game"}) + +def exit_game_response(): + return json.dumps({"type": "exit_game"}) # EVENTS async def enter_game(game_id, player_web_socket): - # TODO fix asssumption that there will only be two players per game + """ TODO fix asssumption that there will only be two players per game """ + # if game does not exist, create it if game_id not in GAMES: GAMES[game_id] = {'players': [player_web_socket], 'game_id': game_id} - message = wait_for_player_response() + message = wait_for_opponent_response() await player_web_socket.send(message) - else: + # if game exists, add player to game if they are not already in it + elif player_web_socket.remote_address[0] not in map(lambda p: p.remote_address[0], GAMES[game_id]['players']): GAMES[game_id]['players'].append(player_web_socket) message = start_game_response() await asyncio.wait([player.send(message) for player in GAMES[game_id]['players']]) - + else: + print("Already in game...") + +async def exit_game(game_id): + players = GAMES[game_id]['players'] + del GAMES[game_id] + message = exit_game_response() + await asyncio.wait([player.send(message) for player in players]) + # -------------------------- async def init(websocket, path): + data = "" try: async for message in websocket: + print(websocket.remote_address) data = json.loads(message) if data["action"] == "enter_game": await enter_game(data["gameId"], websocket) else: print("Unsupported action...") finally: + if data and "gameId" in data: + print("Exiting game...") + await exit_game(data["gameId"]) print("Connection closed...") -#start_server = websockets.serve(init, "", int(os.environ["PORT"])) -start_server = websockets.serve(init, "localhost", 5001) +start_server = websockets.serve(init, "", 5001) +#start_server = websockets.serve(init, "localhost", 5001) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() \ No newline at end of file