import asyncio import random from game_flow import PlayerWebSocketHandler, TEST_SCENARIOS async def simulate_matchmaking(num_players: int = 6): print(f"\n๐ŸŽฎ Spawning {num_players} players...\n") # 1) Login + WebSocket connect players = await asyncio.gather(*[ PlayerWebSocketHandler.setup_player(f"player_{i}") for i in range(num_players) ]) print("\nโœ… All players authenticated + connected\n") # 2) Start listeners BEFORE matchmaking for p in players: p.start_listener() print("\n๐Ÿ‘‚ WebSocket listeners active\n") await asyncio.sleep(0.3) # โœ… 3) Split evenly between classic & blitz half = num_players // 2 assignments = ["classic"] * half + ["blitz"] * (num_players - half) # Optional โ€” shuffle for realism random.shuffle(assignments) print("\n๐ŸŽฏ Queuing players:") for p, mode in zip(players, assignments): print(f" - {p.label} -> {mode}") await asyncio.gather(*[ p.join_matchmaking(mode) for p, mode in zip(players, assignments) ]) print("\nโœ… All players queued โ€” waiting for matches...\n") # 4) Allow enough time for Nakama matchmaker to group players await asyncio.sleep(12) # 5) Cleanup print("\n๐Ÿงน Closing player connections...\n") await asyncio.gather(*[p.close() for p in players]) print("\n๐Ÿ Matchmaking simulation complete\n") if __name__ == "__main__": asyncio.run(simulate_matchmaking(6))