feat: implement safe leave, profile reset, and full game reset semantics
This commit is contained in:
+13
-1
@@ -38,7 +38,7 @@ Failure (maximum 160 encoded bytes):
|
||||
```
|
||||
|
||||
`code` is one of `MALFORMED_JSON`, `PAYLOAD_TOO_LARGE`, `INVALID_NAME`,
|
||||
`INVALID_ROLE`, `INVALID_MODE`, `INVALID_COORDINATE`, `UNAUTHORIZED`,
|
||||
`INVALID_ROLE`, `INVALID_MODE`, `INVALID_COORDINATE`, `UNAUTHORIZED`, `SESSION_INVALIDATED`,
|
||||
`NO_PLAYER_SLOT`, `NO_SPECTATOR_SLOT`, `FORBIDDEN_ROLE`, `WRONG_PHASE`,
|
||||
`NOT_YOUR_TURN`, `CELL_ALREADY_SHOT`, `STALE_GAME`, or `SERVER_BUSY`.
|
||||
`message` is Russian and at most 80 UTF-8 bytes.
|
||||
@@ -51,11 +51,14 @@ Failure (maximum 160 encoded bytes):
|
||||
| `GET /api/health` | 128 B target | diagnostics without secrets, 320 B; includes reset reason |
|
||||
| `POST /api/session/join` | 192 B body | `{name,requestedRole}`; token and role, 192 B |
|
||||
| `POST /api/session/resume` | 96 B body | `{token}`; role and state metadata, 192 B |
|
||||
| `POST /api/session/leave` | 80 B body | `{token,gameId}`; releases only that session |
|
||||
| `POST /api/session/profile-reset` | 80 B body | `{token,gameId}`; server release for local profile reset |
|
||||
| `POST /api/game/config` | 96 B body | `{token,gameId,mode}`; common envelope |
|
||||
| `POST /api/game/start` | 80 B body | `{token,gameId}`; common envelope |
|
||||
| `POST /api/game/shot` | 96 B body | `{token,gameId,x,y}`; common envelope |
|
||||
| `POST /api/game/rematch` | 80 B body | `{token,gameId}`; common envelope |
|
||||
| `POST /api/game/abort` | 80 B body | `{token,gameId}`; common envelope |
|
||||
| `POST /api/game/reset` | 80 B body | `{token,gameId}`; player-only full RAM reset |
|
||||
| `GET /api/state?version=N` | 128 B target | one role-safe state, 768 B |
|
||||
| `GET /api/statistics` | 128 B target | role and bounded match/cumulative counters |
|
||||
|
||||
@@ -63,6 +66,15 @@ The session token is in each POST body. For `GET /api/state`, it is supplied
|
||||
in `X-Session-Token`; absence creates a spectator-safe view. It is never a URL
|
||||
parameter.
|
||||
|
||||
`leave` and `profile-reset` release only the requesting session; profile data is
|
||||
cleared by the browser in Milestone 022. A player leaving an active match aborts
|
||||
that match and returns remaining valid players to the lobby. `game/reset` is
|
||||
available only to an authenticated player and atomically invalidates every
|
||||
session, clears match and cumulative statistics, and starts a fresh game
|
||||
generation. Successful recovery responses contain `resetReason` (`session_left`,
|
||||
`profile_reset`, or `game_reset`) and `generation`. Invalidated-token state
|
||||
polling returns `SESSION_INVALIDATED` with the same bounded recovery metadata.
|
||||
|
||||
## Role-safe state event
|
||||
|
||||
The HTTP state response and WebSocket `state` event use this single 768-byte
|
||||
|
||||
Reference in New Issue
Block a user