22 lines
1.0 KiB
Markdown
22 lines
1.0 KiB
Markdown
# 2025-12-16 - Reconnection and Auto-Pick
|
|
|
|
## Reconnection Logic
|
|
- Use `localStorage.setItem('active_room_id', roomId)` in `LobbyManager` to persist connection state.
|
|
- Upon page load, if a saved room ID exists, attempted to automatically reconnect via `rejoin_room` socket event.
|
|
- Updated `socket.on('join_room')` and `rejoin_room` on the server to update the player's socket ID mapping, canceling any pending "disconnect" timers.
|
|
|
|
## Disconnection Handling
|
|
- Updated `RoomManager` to track `socketId` and `isOffline` status for each player.
|
|
- In `index.ts`, `socket.on('disconnect')`:
|
|
- Marks player as offline.
|
|
- Starts a **30-second timer**.
|
|
- If timer expires (user did not reconnect):
|
|
- Triggers `draftManager.autoPick(roomId, playerId)`.
|
|
- `autoPick` selects a random card from the active pack to unblock the draft flow.
|
|
|
|
## Auto-Pick Implementation
|
|
- Added `autoPick` to `DraftManager`:
|
|
- Checks if player has an active pack.
|
|
- Selects random index.
|
|
- Calls `pickCard` internally to process the pick (add to pool, pass pack, etc.).
|