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:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
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).
Kun tämä kanava on avattu, kyseinen kanava lähettää DeviceSync -arvon (ks. seuraava osa), joka sisältää sen tunnetut keskustelut ja yhteydet.
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