Protokol za sinhronizacijo
Svoj časovni časovni pregled je omogočil, da se vse naprave sinhronizirajo, tako da se lahko izmenjujejo zapisi.
V oblikovalnem dokumentu Swarm so opredeljeni številni scenariji, vendar to ne pomeni sinhronizacije pogovorov med napravami za iste uporabnike.
Stara metoda
Sinkronizacija naprav je bila opravljena prek DHT. Ker vsaka vrednost NE sme preseči 64k, se pogovori niso pošiljali v sinhronizaciji naprav, niti v profilih članov, ker je preveč težka. To je problem in mora biti izboljšana.
V stari metodi je demon prisluhnil „inbox:DEVICE_ID“ za vrednosti DeviceSync, ki vsebuje seznam stikov za sinhronizacijo (glej AccountManager::startSync()
);
Opomba
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).
To je scenarij, ki ga uporabljamo za sinhronizacijo:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Druge naprave (!A) bodo odkrile ta obvestilo in bodo to napravo prek ConnectionManager prosile, naj odpre nov kanal z imenom „sync://DEVICE_ID_A“. (Opomba: A bo dobil obvestilo iz drugih naprav, zato bo prosil tudi za sinhronizacijske kanale).
Takoj ko se ta kanal odpre, bo naprava, ki to kanal prosi, poslala vrednost DeviceSync (glej naslednji del), ki vsebuje znane pogovore in kontakte.
A bo preveril vrednost DeviceSync in:
Odstranite stike, če odkrije odstranjene stike.
Dodatki kontaktov, če odkrije dodane kontakte
Odstranite pogovore, če odkrije odstranjene pogovore
Dodaj pogovor, če odkrije dodane pogovore
Odstranite zahteve pogovorov, če je zahtevek sprejet (daj v pogovorih) / zavrnjen
Če je to opaženo, dodajte zahteve za pogovor
Opomba
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 naprav
Ta vrednost je JSON, ki vsebuje:
{
"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:[] } /* ... */
],
}
Zgodbe uporabnikov
Sinkronizacija pri dodajanju naprave
Alice ustvarja pogovor
Alice je dodala sporočila.
Alice doda še eno napravo.
Druga naprava mora prejeti in sinhronizirati prej ustvarjeno pogovor
Sinkronizacija pri povezovanju naprave
Alice ustvarja pogovor
Alice je dodala sporočila.
Alice povezuje drugo napravo.
Druga naprava mora prejeti in sinhronizirati prej ustvarjeno pogovor
Sinkroniranje med več napravami
Alice ima dve napravi.
Alice ustvarja pogovor
Druga naprava mora sprejemati in sinhronizirati pogovor, ustvarjen na enem od naprav.
Sinkroniranje za odkrivanje novih zahtev
Alice prejme zahtevo za pogovor
Alice doda novo napravo
Druga naprava mora odvzeti zahteve iz naprave A
Sinkroniranje za sprejete zahteve
Alice ima 2 naprave.
Alice sprejema zahtevo za pogovor
Druga naprava mora detekcirati sprejeto zahtevo
Sinkroniranje zahtev za zavrnitev
Alice ima 2 naprave.
Alice zavrne zahtevo za pogovor
Druga naprava mora detekcirati zavrnjeno zahtevo
Trenutna izvedba
gerrit#15584 izvaja to stran