Protocole de synchronisation
Le chat en essaim offre de nouvelles possibilités pour chaque appareil. Maintenant, il est possible de synchroniser l’historique entre les appareils en partageant le référentiel connexe.
Beaucoup de scénarios sont définis dans le document de conception de Swarm, cependant, cela ne signifie pas que les conversations entre les appareils pour le même utilisateur doivent être synchronisées.
La méthode ancienne
La synchronisation des appareils a été effectuée via le DHT. Parce que chaque valeur NE DOIT PAS dépasser 64k, les conversations n’ont pas été envoyées dans la synchronisation des appareils, ni les profils des membres, parce que c’est trop lourd. C’est un problème et DOIT être amélioré.
Dans l’ancienne méthode, le démone écoute sur « inbox:DEVICE_ID » pour les valeurs DeviceSync qui contient la liste de contacts à synchroniser (cf. AccountManager::startSync()
);
NOTE: La valeur actuelle DeviceSync présente sur le DHT est dépassée avec ce projet.
Nouvelle méthode
Comme Jami dispose du ConnectionManager, en utilisant la prise p2p, il est possible d’effectuer rapidement la synchronisation avec de grandes valeurs (car la prise n’est pas limitée en données)
Voici le scénario utilisé pour synchroniser:
Lorsque l’appareil (A) est mis en ligne, il annonce sa présence via un avis d’appareil comme le OldMethod
D’autres appareils (!A) détecteront cette annonce et demanderont à cet appareil par l’intermédiaire du ConnectionManager d’ouvrir un nouveau canal nommé « sync://DEVICE_ID_A ». (Remarque: A recevra des annonces d’autres appareils, il demandera donc aussi des canaux de synchronisation).
Dès que ce canal est ouvert, le dispositif qui demande ce canal envoie une valeur DeviceSync (cf. partie suivante) contenant ses conversations et contacts connus.
A vérifiera la valeur de DeviceSync et:
Supprimer les contacts si elle détecte les contacts supprimés
Ajouter des contacts si elle détecte des contacts ajoutés
Supprimer les conversations si elle détecte les conversations supprimées
Ajouter des conversations si elle détecte des conversations ajoutées
Supprimer les demandes de conversation si la demande est acceptée (maintenant en conversation) / refusée
Ajoutez les demandes de conversation si elles sont détectées
Remarque: Si A détecte de nouvelles conversations, il demandera au dispositif qui a annoncé cette conversation de cloner le référentiel via un canal git (comme décrit dans Swarm chat design)
Synchronisation de l’appareil
Cette valeur est une JSON contenant:
{
"contacts": [/* Contacts (TODO) */],
"conversation": [
{ "id":"convID", "created":TIMESTAMP, "removed":OPTIONAL_TIMESTAMP },
{ "id":"convID2", "created":TIMESTAMP2, "removed":OPTIONAL_TIMESTAMP2 } /* ... */
],
"conversationsRequests": [
{ "id":"convID", "received":TIMESTAMP, "declined":OPTIONAL_TIMESTAMP,
"members":[], "metadatas:[] },
{ "id":"convID2", "received":TIMESTAMP2, "declined":OPTIONAL_TIMESTAMP2
"members":[], "metadatas:[] } /* ... */
],
}
Commentaires des utilisateurs
Synchronisation lors de l’ajout d’un dispositif
Alice crée une conversation
Alice ajoute quelques messages
Alice ajoute un autre appareil
L’autre appareil doit recevoir et synchroniser la conversation créée précédemment
Synchroniser lors de la connexion d” un appareil
Alice crée une conversation
Alice ajoute quelques messages
Alice connecte un autre appareil
L’autre appareil doit recevoir et synchroniser la conversation créée précédemment
Synchronisation entre plusieurs appareils
Alice a deux appareils.
Alice crée une conversation
L’autre appareil doit recevoir et synchroniser la conversation créée sur l’un des appareils
Synchronisation pour détecter de nouvelles demandes
Alice reçoit une demande de conversation
Alice ajoute un nouveau dispositif
L’autre appareil doit récupérer les demandes du dispositif A
Synchronisation des demandes acceptées
Alice a deux appareils.
Alice accepte la demande d’une conversation
L’autre appareil doit détecter la demande acceptée
Synchronisation des demandes de refus
Alice a deux appareils.
Alice refuse la demande de conversation
L’autre appareil doit détecter la demande refusée
Mise en œuvre actuelle
gerrit#15584 met en œuvre cette page