47 lines
2.4 KiB
Markdown
47 lines
2.4 KiB
Markdown
# implementation_plan - Lobby Improvements and Kick Functionality
|
|
|
|
This plan addresses user feedback regarding the draft resumption experience, exit button placement, and host management controls.
|
|
|
|
## User Objectives
|
|
1. **Resume Draft on Re-entry**: Ensure that manually joining a room (after exiting) correctly restores the draft view if a draft is in progress.
|
|
2. **Exit Button Placement**: Move the "Exit Room" button to be near the player's name in the lobby sidebar.
|
|
3. **Kick Player**: Allow the Host to kick players from the room.
|
|
|
|
## Proposed Changes
|
|
|
|
### 1. Server-Side: Kick Functionality
|
|
**File**: `src/server/managers/RoomManager.ts`
|
|
- **Method**: `kickPlayer(roomId, playerId)`
|
|
- **Logic**:
|
|
- Remove the player from `room.players`.
|
|
- If the game is active (drafting/playing), this is a destructive action. We will assume for now it removes them completely (or marks offline? "Kick" usually implies removal).
|
|
- *Decision*: If kicked, they are removed. If the game breaks, that's the host's responsibility.
|
|
|
|
**File**: `src/server/index.ts`
|
|
- **Event**: `kick_player`
|
|
- **Logic**:
|
|
- Verify requester is Host.
|
|
- Call `roomManager.kickPlayer`.
|
|
- Broadcast `room_update`.
|
|
- Emit `kicked` event to the target socket (to force them to client-side exit).
|
|
|
|
### 2. Client-Side: Re-entry Logic Fix
|
|
**File**: `src/client/src/modules/lobby/GameRoom.tsx`
|
|
- **Logic**: Ensure `GameRoom` correctly initializes or updates `draftState` when receiving new props.
|
|
- Add a `useEffect` to update local `draftState` if `initialDraftState` prop changes (though `key` change on component might be better, we'll use `useEffect`).
|
|
|
|
### 3. Client-Side: UI Updates
|
|
**File**: `src/client/src/modules/lobby/GameRoom.tsx`
|
|
- **Sidebar**:
|
|
- Update the player list rendering.
|
|
- If `p.id === currentPlayerId`, show an **Exit/LogOut** button next to the name.
|
|
- If `isMeHost` and `p.id !== me`, show a **Kick/Ban** button next to the name.
|
|
- **Handlers**:
|
|
- `handleKick(targetId)`: Warning confirmation -> Emit `kick_player`.
|
|
- `handleExit()`: Trigger the existing `onExit`.
|
|
|
|
## Verification Plan
|
|
1. **Test Kick**: Host kicks a player. Player should be removed from list and client should revert to lobby (via socket event).
|
|
2. **Test Exit**: Click new Exit button in sidebar. Should leave room.
|
|
3. **Test Re-join**: Join the room code again. Should immediately load the Draft View (not the Lobby View).
|