55 lines
1.9 KiB
Markdown
55 lines
1.9 KiB
Markdown
# Game Activity
|
||
|
||
> **Status:** Active
|
||
> **Last updated:** 2026-07-05
|
||
|
||
## Overview
|
||
|
||
"Now playing" game detection: Electron foreground-window/process heuristics, RAWG metadata match via signaling server, and P2P `game-activity` broadcast to peers. Shown on profile cards and room sidebars.
|
||
|
||
## Responsibilities
|
||
|
||
| Layer | Owns |
|
||
|-------|------|
|
||
| `game-activity` domain | Scan loop, confidence scoring, P2P broadcast, user store updates |
|
||
| Electron IPC | `get-running-process-names`, `get-active-game-candidate` |
|
||
| Signaling server | `POST /api/games/match` (RAWG proxy + miss cache) |
|
||
| P2P | `game-activity` data-channel event |
|
||
|
||
## Server API
|
||
|
||
### `POST /api/games/match`
|
||
|
||
- **Auth:** Public
|
||
- **Body:** `{ processNames: string[], candidates?: { processName, score }[] }` (bounded list sizes)
|
||
- **Response:** `{ game: MatchedGame | null }` — RAWG-backed title, cover art, store links
|
||
|
||
Misses cached in server SQLite (`GameMatchMiss`) to limit API calls.
|
||
|
||
## Client detection
|
||
|
||
- Periodic scan (default 10 s, configurable 5–60 s in localStorage `metoyou_game_scan_interval_ms`).
|
||
- Ignores launcher/helper processes via `IGNORED_PROCESS_NAMES` and regex patterns.
|
||
- **Electron:** suppresses scan when MetoYou window is focused; prefers foreground-window candidate from `get-active-game-candidate`.
|
||
- **Browser/Capacitor:** no process scan — activity only from P2P peers.
|
||
|
||
## P2P event
|
||
|
||
```json
|
||
{ "type": "game-activity", "activity": { "game", "startedAt", "processName", ... } }
|
||
```
|
||
|
||
Peers merge into `User.gameActivity` in NgRx store.
|
||
|
||
## Related
|
||
|
||
- [signaling.md](signaling.md) — not WS-relayed
|
||
- [server-directory.md](server-directory.md) — API base URL for match endpoint
|
||
- Domain README: [`toju-app/src/app/domains/game-activity/README.md`](../../toju-app/src/app/domains/game-activity/README.md)
|
||
|
||
## Changelog
|
||
|
||
| Date | Change |
|
||
|------|--------|
|
||
| 2026-07-05 | Initial cross-context game-activity contract |
|