mirror of
https://github.com/movixcorp/MovixOpenSource.git
synced 2026-07-26 12:22:10 +00:00
3 KiB
3 KiB
WatchParty API
La WatchParty est le service temps réel de Movix. C'est lui qui gère les rooms, le chat, les rôles, les votes, la synchro de lecture et la persistance minimale entre deux redémarrages.
Le service est volontairement concentré dans un seul fichier ESM, watchparty.js, qui combine Express, serveur HTTP et namespace Socket.IO.
Ce que la WatchParty gère
- création de room avec code d'invitation
- synchro lecture / pause / seek
- deux modes de sync :
classicetpro - chat live, réactions et participants
- contrôle par hôte, co-hosts ou mode démocratique
- pause timer et vote de pause
- rooms publiques et liste des rooms visibles
- sauvegarde JSON sur disque au shutdown
Démarrage
Depuis la racine du repo:
npm install
cp API/watchpartyAPI/.env.example API/watchpartyAPI/.env
node API/watchpartyAPI/watchparty.js
Notes utiles :
- le port par défaut est
25566 API/watchpartyAPI/n'a pas son proprepackage.json- les dépendances sont résolues depuis le
node_modulesracine
Configuration
Les variables exposées par API/watchpartyAPI/.env.example sont :
WATCHPARTY_PORTWATCHPARTY_CORS_CREDENTIALSWATCHPARTY_REST_CORS_ORIGINWATCHPARTY_SOCKET_CORS_ORIGINWATCHPARTY_SOCKET_CORS_METHODS
Surface HTTP
| Route | Rôle |
|---|---|
POST /api/watchparty/create |
Crée une room et renvoie roomId + roomCode |
POST /api/watchparty/join |
Rejoint une room via code |
GET /api/watchparty/room/:roomId |
Retourne l'état détaillé d'une room |
GET /api/watchparty/info/:code |
Retourne les infos publiques d'une room via son code |
GET /api/watchparty/public |
Liste les rooms publiques |
GET /api/watchparty/all |
Liste toutes les rooms connues du service |
Surface Socket.IO
Le namespace dédié est /watchparty.
Les familles d'événements à connaître :
- room :
room:info,room:participants,room:chat,room:chatToggled - playback :
playback:update,playback:state,playback:schedule,playback:buffering - contrôle :
control:request,control:approve,control:deny,control:revoke,control:setMode - sync pro :
sync:setMode,sync:probe,sync:probeResult - collaboration :
ready:toggle,reaction:send,media:change - moderation :
message:delete,participant:kick - vote / pause :
pause:start,pause:cancel,vote:request,vote:cast
Persistance et cycle de vie
- les rooms sont gardées en mémoire dans un
Map - au shutdown, le service sauve dans
API/watchpartyAPI/cache/watchparty-rooms.json - au redémarrage, ce fichier est relu puis supprimé
- les rooms vides sont nettoyées après 5 minutes
- un cleanup périodique ferme aussi les rooms trop vieilles ou inactives
Frontend lié
Si tu touches la WatchParty, vérifie aussi :
src/pages/WatchPartyCreate.tsxsrc/pages/WatchPartyJoin.tsxsrc/pages/WatchPartyList.tsxsrc/pages/WatchPartyRoom.tsxsrc/hooks/useWatchParty.tssrc/utils/watchparty.tssrc/utils/watchpartySync.tssrc/workers/watchpartySync.worker.ts