Protocolul de sincronizare

Chat-ul swarm oferă noi posibilități pentru fiecare dispozitiv. Acum, este posibil să se sincronizeze istoricul între dispozitive prin împărțirea repository-ului aferent.

Multe scenarii sunt definite în documentul de proiectare `, cu toate acestea, acest lucru nu implică sincronizarea conversațiilor între dispozitive pentru același utilizator.

Vechiul mod

Din moment ce fiecare valoare nu trebuie să depășească 64k, conversațiile nu au fost trimise în sincronizarea dispozitivului, nici în profilurile membrilor, deoarece este prea grea.

În vechea metodă, daemonul ascultă pe „inbox:DEVICE_ID” pentru valorile DeviceSync care conțin lista de contacte pentru sincronizare (cf. AccountManager::startSync() );

Notă

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

Noua metodă

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

Acum, acesta este scenariul folosit pentru a sincroniza:

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

  2. Alte dispozitive (!A) vor detecta anunțul și vor cere acestui dispozitiv prin ConnectionManager să deschidă un nou canal numit „sync://DEVICE_ID_A”. (Nota: A va primi anunțuri de la alte dispozitive, astfel încât va cere și canalele de sincronizare).

  3. De îndată ce acest canal este deschis, dispozitivul care solicită acest canal trimite o valoare DeviceSync (cf. următoarea parte) care conține conversațiile și contactele sale cunoscute.

  4. A va verifica valoarea DeviceSync și:

    • Scoateţi contacte dacă detectează contacte scoase

    • Adăugați contacte dacă detectează contacte adăugate

    • Scoate conversaţiile dacă detectează conversaţiile eliminate

    • Adăugați conversații dacă detectează conversații adăugate

    • Retrageți cererile conversației dacă cererea este acceptată (în prezent în conversații) / refuzată

    • Adăugați cererile conversației dacă sunt detectate

Notă

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

Simcronizare de dispozitiv

Această valoare este o JSON care conține:

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

Povestea utilizatorului

Simcronizați în cazul adăugării dispozitivului

  • Alice creează o conversaţie

  • (Optional) Alice adaugă câteva mesaje

  • Alice adaugă un alt dispozitiv

  • Celălalt dispozitiv trebuie să primească și să sincronizeze conversația creată anterior

Simcronizați atunci când conectați un dispozitiv

  • Alice creează o conversaţie

  • (Optional) Alice adaugă câteva mesaje

  • Alice conectează un alt dispozitiv

  • Celălalt dispozitiv trebuie să primească și să sincronizeze conversația creată anterior

Sincronizare între mai multe dispozitive

  • Alice a avut 2 dispozitive.

  • Alice creează o conversaţie

  • Celălalt dispozitiv trebuie să primească și să sincronizeze conversația creată pe unul dintre dispozitive

Sincronizare pentru detectarea de noi solicitări

  • Alice primeşte cererea de conversaţie

  • Alice adaugă un nou dispozitiv

  • Celălalt dispozitiv trebuie să recupereze cererile de la dispozitivul A

Sincronizare pentru cererile acceptate

  • Alice are 2 dispozitive.

  • Alice acceptă cererea unei conversaţii

  • Celălalt dispozitiv trebuie să detecteze cererea acceptată

Sincronizare pentru cererile de declin

  • Alice are 2 dispozitive.

  • Alice refuză cererea de conversaţie

  • Celălalt dispozitiv trebuie să detecteze cererea refuzată

Implementarea actuală

gerrit#15584 implementează această pagină