Phase 3.0-B — DataChannels P2P pour le chat en temps réel
Jusqu'ici, tout le chat passait par le serveur : message envoyé → Socket.IO → nodyx-core → broadcast. Ça marche, mais il y a une latence et ça charge le serveur.
Avec les DataChannels WebRTC, les pairs déjà connectés en vocal peuvent s'envoyer des données directement — sans passer par le serveur.
Architecture p2p.ts
p2p.ts — gestionnaire de mesh DataChannels
├── Un DataChannel par pair (côté initiateur)
├── Réception via ondatachannel (côté répondeur)
├── File de messages en attente si channel pas encore ouvert
└── Reconnexion automatique si peer disparaît
Messages P2P supportés
| Type | Payload | Usage |
|---|---|---|
p2p:typing | { userId, username, channelId } | Indicateur de frappe instantané |
p2p:reaction | { messageId, emoji, userId } | Réaction emoji optimiste |
canvas:op | CanvasElement | Tracé / forme / sticky NodyxCanvas |
canvas:cursor | { x, y, userId, speaking } | Curseur distant sur le canvas |
canvas:clear | { by, ts } | Effacement total du canvas |
L'indicateur P2P
Le badge ⚡ P2P dans le header des canaux texte s'allume quand la connexion directe est établie. Le fallback Socket.IO reste toujours actif pour les cas sans P2P.
L'utilisateur sait qu'il est "dans le mesh" — c'est concret, pas juste un concept marketing.