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:

  1. Lorsque l’appareil (A) est mis en ligne, il annonce sa présence via un avis d’appareil comme le 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

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