Files
mtg-online-drafter/docs/development/devlog/2024-12-18-165500_server_persistence.md
2025-12-18 17:24:07 +01:00

27 lines
1.5 KiB
Markdown

# 2024-12-18 16:55:00 - Implement Server Persistence and Room Cleanup
## Description
Implemented server-side state persistence to ensure game rooms, drafts, and game states survive server restarts and network issues. Added logic to keep rooms alive for at least 8 hours after the last activity, satisfying the requirements for robustness and re-joinability.
## Key Changes
1. **Persistence Manager**:
- Created `PersistenceManager.ts` to save and load `rooms`, `drafts`, and `games` to/from JSON files in `./server-data`.
- Integrated into `server/index.ts` with auto-save interval (every 5s) and save-on-shutdown.
2. **Room Manager**:
- Added `lastActive` timestamp to `Room` interface.
- Updated `lastActive` on all significant interactions (join, leave, message, etc.).
- Implemented `disconnect` logic: if players disconnect, the room is NOT deleted immediately.
- Implemented `leaveRoom` logic: Explicit leaving (waiting phase) still removes players but preserves the room until cleanup if empty.
- Added `cleanupRooms()` method running every 5 minutes to delete rooms inactive for > 8 hours.
## Impact
- **Reliability**: Server crashes or restarts will no longer wipe out active games or drafts.
- **User Experience**: Users can reconnect to their room even hours later (up to 8 hours), or after a server reboot, using their room code.
- **Maintenance**: `server-data` directory now contains the active state, useful for debugging.
## Status
- [x] Code implementation complete.
- [ ] Verify `server-data` folder is created and populated on run.