fix(agent): handle bot reconnection and return 400 on duplicate registration

This commit is contained in:
Isaac Johnson 2026-09-06 08:29:31 -05:00
parent 8e26c21995
commit e9e95c409b
2 changed files with 35 additions and 11 deletions

View File

@ -84,15 +84,21 @@ async def reset_board():
tags=["Players"],
)
async def register_player(player_in: PlayerCreate):
player = await game_engine.register_player(player_in)
board_state = await game_engine.get_board_state()
await manager.broadcast({
"event": "player_registered",
"player": player.model_dump(),
"total_players": len(board_state.players),
"turn": board_state.turn.model_dump(),
})
return player
try:
player = await game_engine.register_player(player_in)
board_state = await game_engine.get_board_state()
await manager.broadcast({
"event": "player_registered",
"player": player.model_dump(),
"total_players": len(board_state.players),
"turn": board_state.turn.model_dump(),
})
return player
except ValueError as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=str(e),
)
@router.get(

View File

@ -23,11 +23,29 @@ class SmartBotAgent:
self.is_leader: bool = False
def register(self):
"""Register the bot avatar on the 64x64 grid."""
"""Register the bot avatar on the 64x64 grid or reconnect if already present."""
try:
players = requests.get(f"{BASE_URL}/players").json()
for p in players:
if p.get("name") == self.name:
self.bot_id = p["id"]
print(f"🔄 [RECONNECT] Reconnected to existing {self.name} (ID: {self.bot_id}, Str: {p.get('strength', self.strength)}) at ({p.get('x')}, {p.get('y')})")
return
except Exception:
pass
res = requests.post(
f"{BASE_URL}/players",
json={"name": self.name, "color": self.color, "strength": self.strength},
)
if res.status_code == 400 and "already registered" in res.text:
players = requests.get(f"{BASE_URL}/players").json()
for p in players:
if p.get("name") == self.name:
self.bot_id = p["id"]
print(f"🔄 [RECONNECT] Reconnected to existing {self.name} (ID: {self.bot_id}) at ({p.get('x')}, {p.get('y')})")
return
res.raise_for_status()
data = res.json()
self.bot_id = data["id"]
@ -231,7 +249,7 @@ class SmartBotAgent:
while True:
turn_info = requests.get(f"{BASE_URL}/turn").json()
if not turn_info.get("game_started", False):
print("⏳ [LOBBY] Waiting for game to start via 'Start Game' in UI...", end="\r")
print("⏳ [LOBBY] Waiting for game to start via 'Start Game' in UI...", end="\r", flush=True)
time.sleep(0.5)
continue