Protocollo di sincronizzazione

Il swarm chat offre nuove possibilità per ogni dispositivo. Ora, è possibile sincronizzare la storia tra i dispositivi condividendo il relativo repository.

Molti scenari sono definiti nel documento di progettazione di Swarm, tuttavia, ciò non implica la sincronizzazione delle conversazioni tra dispositivi per lo stesso utente.

Vecchio metodo

La sincronizzazione dei dispositivi è stata effettuata tramite DHT. Poiché ogni valore NON DEVE superare i 64k, le conversazioni non sono state inviate in sincronizzazione dei dispositivi, né i profili dei membri, perché è troppo pesante. Questo è un problema e DEVE essere migliorato.

Nel vecchio metodo, il daemon sta ascoltando su «inbox:DEVICE_ID» per i valori DeviceSync che contiene la lista di contatti da sincronizzare (cfr AccountManager::startSync() );

Nota

The current DeviceSync value present on the DHT is deprecated with this draft.

Nuovo metodo

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

Questo è lo scenario usato per sincronizzare:

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

  2. Altri dispositivi (!A) rilevano l’annuncio e chiedono a questo dispositivo attraverso il ConnectionManager di aprire un nuovo canale chiamato «sync://DEVICE_ID_A». (Nota: A riceverà un annuncio da altri dispositivi, quindi chiederà anche canali di sincronizzazione).

  3. Non appena viene aperto questo canale, il dispositivo che chiede questo canale invierà un valore DeviceSync (cfr. parte successiva) contenente le sue conversazioni e contatti noti.

  4. A controllerà il valore di DeviceSync e:

    • Rimuovere i contatti se rileva i contatti rimossi

    • Aggiungere contatti se rileva contatti aggiunti

    • Elimina le conversazioni se rileva le conversazioni eliminate

    • Aggiungere conversazioni se rileva conversazioni aggiunte

    • Elimina le richieste di conversazione se la richiesta è accettata (ora in conversazione) / rifiutata

    • Aggiungere le richieste della conversazione se rilevato

Nota

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

Sincronizzazione del dispositivo

Questo valore è un JSON contenente:

{
    "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:[] } /* ... */
    ],
}

Storie degli utenti

Sincronizzare quando si aggiunge il dispositivo

  • Alice crea una conversazione

  • Alice aggiunge alcuni messaggi

  • Alice aggiunge un altro dispositivo

  • L’altro dispositivo dovrebbe ricevere e sincronizzare la conversazione creata in precedenza

Sincronizzare quando si collega un dispositivo

  • Alice crea una conversazione

  • Alice aggiunge alcuni messaggi

  • Alice collega un altro dispositivo

  • L’altro dispositivo dovrebbe ricevere e sincronizzare la conversazione creata in precedenza

Sincronizzazione tra più dispositivi

  • Alice ha 2 dispositivi.

  • Alice crea una conversazione

  • L’altro dispositivo deve ricevere e sincronizzare la conversazione creata su uno dei dispositivi

Sincronizzazione per rilevare nuove richieste

  • Alice riceve la richiesta di una conversazione

  • Alice aggiunge un nuovo dispositivo

  • L’altro dispositivo deve recuperare le richieste dal dispositivo A

Sincronizzazione delle richieste accettate

  • Alice ha due dispositivi.

  • Alice accetta la richiesta di una conversazione

  • L’altro dispositivo deve rilevare la richiesta accettata

Sincronizzazione per le richieste di rifiuto

  • Alice ha due dispositivi.

  • Alice rifiuta la richiesta di una conversazione

  • L’altro dispositivo deve rilevare la richiesta rifiutata

Attuale attuazione

gerrit#15584 implementa questa pagina