summaryrefslogtreecommitdiff
path: root/resources/external/game_coordinator.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/external/game_coordinator.py')
-rw-r--r--resources/external/game_coordinator.py21
1 files changed, 18 insertions, 3 deletions
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"],