Protokol sinhronizacije

Svaj chat pruža nove mogućnosti za svaki uređaj. Sada je moguće sinhronizirati povijest između uređaja dijeljenjem odgovarajućeg skladišta.

Mnogo scenarija je definirano u Swarm dizajn dokument, međutim, to ne znači za sinhronizaciju razgovora između uređaja za iste korisnike.

Stari način

Sinkronizacija uređaja je provedena putem DHT-a. Budući da svaka vrijednost NE MOJE premašiti 64k, razgovori nisu poslani u sinhronizaciji uređaja, niti u profilima članova, jer je previše težak.

U starom metodu, daemon sluša na „inbox:DEVICE_ID” za vrijednosti DeviceSync koja sadrži popis kontaktnih podataka za sinhronizaciju (g. AccountManager::startSync() );

Napomena

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

Nova metoda

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

Ovo je scenarij koji se koristi za sinhronizaciju:

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

  2. Ostali uređaji (!A) će detektirati objavu i tražiti od ovog uređaja kroz ConnectionManager da otvori novi kanal nazvan „sync://DEVICE_ID_A”. (Napomena: A će dobiti objavu od drugih uređaja, tako da će tražiti i za sinhronizacijske kanale).

  3. U trenutku otvaranja ovog kanala, uređaj koji traži ovaj kanal šalje vrijednost DeviceSync (usp. sljedeći dio) koja sadrži njegove poznate razgovore i kontakte.

  4. A provjerava vrijednost DeviceSync i:

    • Uklonite kontakte ako otkrije uklonjene kontakte

    • Dodajte kontakte ako otkrije dodane kontakte

    • Uklonite razgovore ako otkrije uklonjene razgovore

    • Dodajte razgovore ako otkrije dodatne razgovore

    • Uklonite zahtjeve razgovora ako je zahtjev prihvaćen (sada u razgovorima) / odbijen

    • Dodajte zahtjeve razgovora ako se otkrije

Napomena

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

Sinkronizacija uređaja

Ova vrijednost je JSON sadržaj:

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

Priče korisnika

Simcronizacija pri dodavanju uređaja

  • Alice stvara razgovor

  • (Optional) Alice dodati neke poruke

  • Alice dodaje još jedan uređaj

  • Drugi uređaj mora primati i sinhronizirati prethodno stvorenu konverzaciju

Synchronizacija prilikom povezivanja uređaja

  • Alice stvara razgovor

  • (Optional) Alice dodati neke poruke

  • Alice povezuje još jedan uređaj

  • Drugi uređaj mora primati i sinhronizirati prethodno stvorenu konverzaciju

Sinhronizacija između više uređaja

  • Alice je imala 2 uređaja.

  • Alice stvara razgovor

  • Drugi uređaj mora primati i sinhronizirati razgovor stvoren na jednom od uređaja

Simkronizacija za otkrivanje novih zahtjeva

  • Alice prima zahtjev za razgovor

  • Alice dodati novi uređaj

  • Drugi uređaj mora preuzeti zahtjeve iz uređaja A

Sinkronizacija za prihvaćene zahtjeve

  • Alice ima 2 uređaja.

  • Alice prihvaća zahtjev za razgovor

  • Drugi uređaj mora otkriti prihvaćeno zahtjev

Sinkroniranje zahtjeva za odbijanje

  • Alice ima 2 uređaja.

  • Alice odbija zahtjev za razgovor

  • Drugi uređaj mora otkriti odbijen zahtjev

Trenutna provedba

gerrit#15584 provodi ovu stranicu