From 255fbf19cc9499ef384d41f68515da5e49e8a3ce Mon Sep 17 00:00:00 2001 From: Anson Bridges Date: Tue, 19 Aug 2025 12:38:02 -0700 Subject: added menus, reworking GC client architecture --- resources/MenuOptions.theme | Bin 0 -> 337 bytes resources/external/game_coordinator.py | 21 ++++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 resources/MenuOptions.theme (limited to 'resources') diff --git a/resources/MenuOptions.theme b/resources/MenuOptions.theme new file mode 100644 index 0000000..899c3df Binary files /dev/null and b/resources/MenuOptions.theme differ diff --git a/resources/external/game_coordinator.py b/resources/external/game_coordinator.py index bd2eb9c..0f04e18 100644 --- a/resources/external/game_coordinator.py +++ b/resources/external/game_coordinator.py @@ -15,13 +15,15 @@ import secrets import sys import random import time +from string import ascii_uppercase # optional, for 4-letter id format import websockets from websockets.asyncio.server import serve DEFAULT_PORT = 8181 -DEFAULT_IP = "192.168.7.112" +DEFAULT_IP = "" +MAX_LOBBY_ID_GEN_ATTEMPTS = 20 LOBBY_CONTROL_COMMANDS = ["disconnect", "kick_player", "get_lobby_info", "deny_player", "accept_player", "end_lobby", "set_lobby_locked", "set_lobby_state", "set_paused"] HOST_LOBBY_REQD_FIELDS = ["lobby_name", "game_type", "username", "private", "password", "max_players"] HOST_LOBBY_REQD_FIELD_TYPES = [str, str, str, bool, str, int] @@ -46,6 +48,19 @@ async def send_lobby_list(websocket): """ LOBBY FUNCTIONS """ +# generate lobby id +async def generate_lobby_id(): + new_id = None + attempts = 0 + while (attempts < MAX_LOBBY_ID_GEN_ATTEMPTS) and ( (not new_id) or (new_id in LOBBIES) ): + new_id = ''.join(random.choices(ascii_uppercase, k=4)) # DEFINE FID FORMAT HERE + attempts += 1 + + if attempts >= MAX_LOBBY_ID_GEN_ATTEMPTS: + return secrets.token_urlsafe(12) # fall back to non-repeating lobby ID + return new_id + + # get information of all connected players to lobby for async def get_player_info(lobby): players = [] @@ -268,7 +283,7 @@ async def lobby_loop(websocket, lobby, player): # message forwarding elif event["type"] == "request": - response = {"type" : "request", "destination" : player_id, "data" : event["request_fields"] } + response = {"type" : "request", "destination" : player_id, "request_fields" : event["request_fields"] } await game["players"][ event["source"] ]["socket"].send( json.dumps(response) ) elif event["type"] == "request_response": response = {"type" : "request_response", "data" : event["requested_data"] } @@ -397,7 +412,7 @@ async def host_lobby(websocket, event): host_player = await create_player(websocket, event["username"], is_host=True) - lobby_id = secrets.token_urlsafe(12) + lobby_id = await generate_lobby_id() new_lobby = { "lobby_id" : lobby_id, "lobby_name" : event["lobby_name"], "game_type" : event["game_type"], -- cgit v1.2.3