Synkronointiprotokolli

Swarm chat tarjoaa uusia mahdollisuuksia jokaiselle laitteelle. Nyt on mahdollista synkronoida historian laitteiden välillä jaettaen niihin liittyvän säilytyslaitteen.

Swarm suunnitteludokumentissa määritellään monia skenaarioita, mutta tämä ei tarkoita samaa käyttäjää varten laitteiden välisten keskustelujen synkronointia.

Vanha menetelmä

Laitteiden synkronointi tehtiin DHT:n kautta. Koska jokainen arvo ei PÄSÄ ylittää 64k:tä, keskusteluja ei lähetetty laitteiden synkronointiin eikä jäsenprofiileissa, koska se on liian raskas. Tämä on ongelma ja se on parannettava.

Vanhassa menetelmässä daemon kuuntelee ”inbox:DEVICE_ID” DeviceSync-arvoja varten, jossa on yhteystietojen luettelo synkronoiduksi (ks. AccountManager::startSync() );

Muista

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

Uusi menetelmä

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

Tässä on synkronointi:

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

  2. Muut laitteet (!A) havaitsevat ilmoituksen ja pyytävät tätä laitteen ConnectionManager kautta avaamaan uusi kanava nimeltä ”sync://DEVICE_ID_A”. (Huomautus: A saa ilmoituksen muista laitteista, joten se pyytää myös synkronointikanavia).

  3. Kun tämä kanava on avattu, kyseinen kanava lähettää DeviceSync -arvon (ks. seuraava osa), joka sisältää sen tunnetut keskustelut ja yhteydet.

  4. A tarkistaa DeviceSync -arvon ja:

    • Poista yhteydet, jos se havaitsee poistuja yhteyksiä

    • Lisää yhteyksiä, jos se havaitsee lisättyjä yhteyksiä

    • Poista keskusteluja, jos se havaitsee poistettuja keskusteluja

    • Lisää keskustelut, jos se havaitsee lisätyjä keskustelua

    • Poista keskustelujen pyynnöt, jos pyyntö hyväksytään (jos nyt keskustellaan) / hylätään

    • Lisää keskustelun pyyntöjä, jos se havaitaan

Muista

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

Laitteen synkronointi

Tämä arvo on JSON-versio, joka sisältää:

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

Käyttäjän tarinat

Sinkronisointi laitteen lisäämisen yhteydessä

  • Alice luo keskustelun

  • Alice lisää viestejä.

  • Alice lisää uuden laitteen

  • Toinen laite saa ja synkronoi aiemmin luotuun keskustelun

Synkronoida laitteen yhteydessä

  • Alice luo keskustelun

  • Alice lisää viestejä.

  • Alice yhdistää toisen laitteen

  • Toinen laite saa ja synkronoi aiemmin luotuun keskustelun

Useiden laitteiden synkronointi

  • Alice sai kaksi laitteen.

  • Alice luo keskustelun

  • Toinen laite saa ja synkronoi yhdellä laitteesta luotuun keskustelun

Synkronointi uusien pyyntöjen havaitsemiseksi

  • Alice saa puhelun pyynnön.

  • Alice lisää uutta laitteen

  • Toisen laitteen on haettava pyynnöt laitteesta A

Hyväksytytyn pyynnön synkronointi

  • Alicellä on kaksi laitteen.

  • Alice hyväksyy pyynnön.

  • Toisen laitteen on havaittava hyväksytty pyyntö

Sinkronisointi kieltäytymispyyntöille

  • Alicellä on kaksi laitteen.

  • Alice kieltäytyi keskustelupyynnöstä.

  • Toisen laitteen on havaittava hylätyn pyynnön.

Nykyinen täytäntöönpano

gerrit#15584 toteuttaa tämän sivun