**Language / Langue :** **FR** | [[en:editeur:collaboration|EN]] ====== Édition collaborative ====== Depuis la version 4.12, l'éditeur graphique permet d'écrire un scénario **à plusieurs, en temps réel**. Une session collaborative est un document ''.jdrproj'' temporaire partagé par lien privé : chaque auteur travaille dans son éditeur habituel (web ou desktop) et voit les modifications des autres apparaître en direct. La session **ne sauvegarde rien** : le document partagé vit en mémoire sur le serveur le temps de la session. Pensez à **exporter ou sauvegarder** régulièrement depuis votre éditeur — et toujours avant de quitter. ===== Vue d'ensemble ===== * Une session = un document partagé + un **token privé** (dans le lien). Qui a le lien peut rejoindre. * Jusqu'à **10 auteurs** simultanés, clients web et desktop mélangés librement. * Deux façons d'héberger : * sur le **serveur web JDR-Bot** (le plus simple) ; * sur **votre PC** via la version desktop (port TCP ''41212''), sans dépendre du serveur public. ===== Créer et rejoindre (web) ===== - Ouvrez votre scénario dans l'éditeur web. - **Outils → Créer session collaborative** : donnez un nom à la session, le lien de partage est copié automatiquement. - Envoyez le lien à vos co-auteurs. Le statut ''Collab'' (barre du bas) affiche les participants connectés, chacun avec sa couleur. Pour rejoindre : * ouvrez simplement le **lien reçu** (''.../editor?collab=...'') — l'éditeur rejoint la session au chargement ; * ou **Outils → Rejoindre session collaborative** et collez le lien (ou le token seul). Le document de la session **remplace** ce qui était ouvert dans votre éditeur — sauvegardez votre travail en cours avant de rejoindre. ===== Depuis le desktop ===== ==== Rejoindre une session web ==== **Outils → Rejoindre session collaborative**, collez le lien. La version desktop demande (et mémorise) l'**URL du serveur** JDR-Bot web si elle n'est pas déduisible du lien. ==== Héberger en local ==== La version desktop peut héberger elle-même la session, sans serveur public : - **Outils → Héberger session locale** : un serveur collaboratif démarre sur votre PC (port TCP ''41212'') et le **lien LAN** est copié. - Sur le **même réseau local** (domicile, association...), les co-auteurs ouvrent ce lien dans leur navigateur ou leur desktop : ça marche directement. - **Par Internet**, vous devez ouvrir/rediriger le port ''41212'' de votre box vers votre PC (comme pour héberger une partie de jeu), puis partager le lien avec votre IP publique. L'hôte desktop et les invités (web ou desktop) travaillent dans la même session, avec les mêmes fonctionnalités. La session s'arrête quand l'hôte ferme l'application. ===== Pendant la session ===== * **Présence** : la liste des participants (nom + couleur) est visible dans le statut ''Collab'' et mise à jour en temps réel. * **Propagation** : chaque modification (texte, variable, salle ajoutée/supprimée, renommage...) apparaît chez les autres en ~1 seconde, sans recharger. * **Verrou doux** : quand un auteur édite un champ, les autres voient un indicateur à son nom et sa couleur. Ce verrou est **consultatif** — il signale, mais n'empêche pas d'écrire au même endroit. Il reste actif tant que le champ a le focus et disparaît quand l'auteur en sort (ou se déconnecte). * **Copier lien de session** (menu Outils ou statut ''Collab'') : à tout moment, pour inviter quelqu'un en cours de route. ===== Conflits et synchronisation ===== La session fonctionne par **versions** : chaque modification est envoyée comme un petit patch basé sur la version courante du document. * **Champs différents** : deux auteurs qui éditent des choses différentes au même moment (deux salles, une salle et une variable...) sont **fusionnés automatiquement** — aucune gêne, aucun message. * **Même champ** : le **dernier qui écrit gagne**. L'autre auteur est resynchronisé sur la valeur gagnante, avec un message explicite. Pas de texte mélangé, pas de demi-fusion. * **Suppressions concurrentes** : supprimer une salle pendant qu'un autre édite la liste des salles déclenche aussi une resynchronisation (pour ne jamais éditer la mauvaise salle). ==== Le brouillon local ==== Quand une resynchronisation écarte vos changements non envoyés, ils ne sont **pas perdus** : une fenêtre « Resynchronisation collaborative » propose de **copier** ou d'**exporter la copie locale** (''.jdrproj''). L'éditeur reste marqué « modifié » tant que ce brouillon n'est pas traité — fermer ou quitter la session demandera confirmation. ===== Annuler / Rétablir (Ctrl+Z / Ctrl+Y) ===== L'historique d'annulation est **local à chaque auteur** : il mémorise des instantanés complets de //votre// document, pas les modifications des autres. * **Rejoindre une session ou être resynchronisé vide l'historique.** C'est voulu : les étapes précédentes décrivaient un document qui n'est plus celui de la session. * **Ctrl+Z restaure votre instantané, y compris par-dessus les modifications reçues entre-temps.** Si un co-auteur a modifié la salle 3 après votre dernière action et que vous annulez, sa modification est annulée chez tout le monde — proprement, comme si vous l'aviez éditée vous-même. * **Le dernier qui écrit gagne** : même règle que pour deux éditions simultanées du même champ. En collaboration, préférez des annulations immédiates (juste après votre propre action) — elles ne touchent alors que vos changements. Avant un Ctrl+Z appuyé, prévenez vos co-auteurs. ===== Sauvegarde et export ===== * Le serveur **ne sauvegarde jamais** le scénario : il ne fait que synchroniser les auteurs. * Chaque participant peut utiliser **Exporter YAML** / **Sauvegarder** à tout moment depuis son éditeur — tout le monde travaille sur le même document courant, les exports sont identiques. * Conseil d'équipe : désignez un « gardien » qui exporte régulièrement, surtout avant les pauses. ===== Fin de session ===== * **Outils → Quitter collaboration** : déconnexion propre (confirmation demandée s'il reste des changements non sauvegardés). * **Session vide** : quand tout le monde est parti, la session reste joignable ~2 minutes (grâce de reconnexion), puis elle est supprimée. L'ancien lien ne fonctionne plus. * **Session inactive** : si plus personne ne touche à rien (onglets fermés ou cachés) pendant 30 minutes, la session expire. Un onglet ouvert et **visible** compte comme présent — pas d'expiration tant que l'équipe est là, même sans éditer. * **Redémarrage du serveur** : les sessions vivent en mémoire — elles sont perdues. Recréez une session et repartagez le lien (vos documents locaux et exports ne sont pas affectés). ===== Limites et garde-fous ===== ^ Limite ^ Valeur ^ | Participants par session | 10 | | Taille du projet partagé | 8 Mo | | Taille d'une modification | 256 Ko (un collage énorme est refusé proprement) | | Rythme de modifications | ~120 messages/min par auteur | | Reconnexion automatique | ~20 tentatives (~4 min), puis arrêt avec message — le document local est conservé | En cas de coupure réseau, l'éditeur se reconnecte tout seul et resynchronise. Si la session a expiré entre-temps, un message clair l'indique. ===== Messages courants ===== ^ Message ^ Signification ^ | //Session collaborative introuvable ou expirée// | Le token ne correspond plus à une session (expirée, serveur redémarré, lien erroné). Recréez/redemandez un lien. | | //Session collaborative complète// | 10 participants déjà connectés. | | //Trop de messages// | Rythme de modifications trop élevé — attendez quelques secondes, tout repart. | | //Document resynchronisé avec la session// | Un conflit a été résolu en faveur d'un autre auteur ; vos changements écartés sont dans le brouillon local. | | //Reconnexion collaborative interrompue// | Serveur injoignable après plusieurs tentatives. Votre document local est intact ; rejoignez via le lien quand le serveur répond. | Voir aussi : [[fr:editeur:presentation|Présentation de l'éditeur]] · [[fr:editeur:linter-export|Linter et export]]