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:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
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).
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.
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