fix(agent): handle bot reconnection and return 400 on duplicate registration
This commit is contained in:
parent
8e26c21995
commit
e9e95c409b
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue