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:

  1. When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.

  2. 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).

  3. 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.

  4. 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