Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CricketGame/backend/realtime/cpu.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,14 +124,16 @@ async def maybe_cpu_move(manager, room, innings) -> None:
# CPU batter: submit immediately if its slot is empty
if striker_is_cpu and "bat" not in pending:
await asyncio.sleep(0.25)
pending["bat"] = cpu_pick_move(manager, room, "bat", innings.striker)
# Run in thread to prevent blocking event loop with DB queries
pending["bat"] = await asyncio.to_thread(cpu_pick_move, manager, room, "bat", innings.striker)
placed = True

# CPU bowler: submit immediately if its slot is empty
if bowler_is_cpu and "bowl" not in pending:
if not placed:
await asyncio.sleep(0.25)
pending["bowl"] = cpu_pick_move(manager, room, "bowl", innings.current_bowler)
# Run in thread to prevent blocking event loop with DB queries
pending["bowl"] = await asyncio.to_thread(cpu_pick_move, manager, room, "bowl", innings.current_bowler)
placed = True

# Broadcast state so the frontend immediately sees the CPU's ready indicator
Expand Down Expand Up @@ -238,9 +240,11 @@ async def auto_play_cpu_match(manager, room) -> None:
return
pending = room.pending_moves
if "bat" not in pending:
pending["bat"] = cpu_pick_move(manager, room, "bat", innings.striker)
# Run in thread to prevent blocking event loop with DB queries
pending["bat"] = await asyncio.to_thread(cpu_pick_move, manager, room, "bat", innings.striker)
if "bowl" not in pending:
pending["bowl"] = cpu_pick_move(manager, room, "bowl", innings.current_bowler)
# Run in thread to prevent blocking event loop with DB queries
pending["bowl"] = await asyncio.to_thread(cpu_pick_move, manager, room, "bowl", innings.current_bowler)
await asyncio.sleep(0.25)
resolved = await manager._resolve_pending_ball(room, innings)
if not resolved:
Expand Down
2 changes: 1 addition & 1 deletion CricketGame/backend/test_game_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def test_cpu_toss_timeout_fallback_triggers():
room.captains["A"] = "CPU Bot"
match = Match("M3", "team", ["CPU Bot"], ["Host"], total_overs=1, total_wickets=1)

def fixed_do_toss():
def fixed_do_toss(caller=None):
match.toss_caller = "CPU Bot"
return {"caller": "CPU Bot"}

Expand Down