1.4 KiB
1.4 KiB
Beamer Live Updates
Beamer/projector live updates are backend-owned and use Rails ActionCable at /cable.
Goal
Frontend fullscreen pages talk only to turniere-backend.
No TURNIERE_MATCH_URL.
No Socket.IO dependency on turniere-match.
Transport
- websocket endpoint:
GET /cable - ActionCable channel:
TournamentBeamersChannel - subscription params:
tournament_idbeamer_name
If requested beamer does not exist, channel falls back to tournament default beamer when present.
Payload contract
Initial subscribe snapshot:
{
"type": "beamer.snapshot",
"event": "snapshot",
"tournament_id": 12,
"beamer": {
"id": 34,
"name": "default",
"display_state": "during_game",
"config": {
"match_filter": "state:in_progress"
}
}
}
Mutation events use same beamer shape with type / event values:
beamer.createdbeamer.updatedbeamer.deleted
Broadcast source
Broadcasts come from Beamer model commit callbacks.
That means normal HTTP writes and follower-sync imports use same broadcast path.
Covered mutations:
- create
- update
- delete
Frontend expectation
Frontend should:
- fetch beamer config from backend REST API
- subscribe to
TournamentBeamersChannel - update fullscreen state from explicit
beamerpayload - reconnect if beamer name changes or current beamer gets deleted