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
The current DeviceSync value present on the DHT is deprecated with this draft.
Nouvelle méthode
Since Jami has the ConnectionManager, using p2p socket is possible to perform sync quickly with big values (cause the socket is not limited in data).
Voici le scénario utilisé pour synchroniser:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the 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
Note
If A detects new conversations, it will asks the device which announced that conversation to clone the repository through a git channel (so like described in 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