Synkroniseringsprotokol
Det er muligt at synkronisere historie mellem enheder ved at dele det relaterede arkiv.
Mange scenarier er defineret i Swarm design dokument, men dette betyder ikke for synkronisering af samtaler mellem enheder for den samme bruger.
Gamle metode
Device synkronisering blev foretaget via DHT. Fordi hver værdi MÅS ikke overstige 64k, blev samtaler ikke sendt i enhed synkronisering, eller medlem profiler, fordi det er for tungt. Dette er et problem og MÅS at blive forbedret.
I den gamle metode lytter daemon på »inbox:DEVICE_ID« til DeviceSync-værdier, som indeholder kontaktlisten til synkronisering (jf. AccountManager::startSync()
);
Bemærk
The current DeviceSync value present on the DHT is deprecated with this draft.
Ny metode
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).
Dette er scenariet, der bruges til at synkronisere:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Andre enheder (!A) vil opdage, at meddelelsen og vil bede denne enhed gennem ConnectionManager åbne en ny kanal kaldet »sync://DEVICE_ID_A«. (Notice: A vil modtage meddelelser fra andre enheder, så det vil bede om synkronisering kanaler også).
Så snart denne kanal åbnes, sender den enhed, der anmoder om denne kanal, en DeviceSync (jf. næste del) værdi, der indeholder sine kendte samtaler og kontakter.
A kontrollerer DeviceSync-værdien og:
Fjern kontakter, hvis det opdager fjernede kontakter
Tilføj kontakter, hvis det opdager tilføjede kontakter
Fjern samtaler, hvis det opdager fjernede samtaler
Tilføj samtaler, hvis det opdager tilføjede samtaler
Fjern forespørgsler fra samtalen, hvis forespørgslen er accepteret (nu i samtaler) / afvist
Tilføj forespørgsler fra samtalen, hvis det opdages
Bemærk
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).
Synkronisering af enheder
Denne værdi er en JSON, der indeholder:
{
"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:[] } /* ... */
],
}
Brugerhistorier
Synkronisering ved tilføjelse af enhed
Alice skaber en samtale
Alice tilføjer nogle beskeder
Alice tilføjer en anden enhed
Den anden enhed skal modtage og synkronisere den tidligere oprettede samtale
Synkronisering ved tilslutning af en enhed
Alice skaber en samtale
Alice tilføjer nogle beskeder
Alice forbinder en anden enhed
Den anden enhed skal modtage og synkronisere den tidligere oprettede samtale
Synkronisering mellem flere enheder
Alice har to enheder.
Alice skaber en samtale
Den anden enhed skal modtage og synkronisere den samtale, der er oprettet på en af de enheder
Synkronisering til at opdage nye anmodninger
Alice modtager en anmodning om en samtale
Alice tilføjer en ny enhed
Den anden enhed skal hente anmodningerne fra enhed A
Synkronisering af accepterede anmodninger
Alice har to enheder.
Alice accepterer en anmodning om en samtale
Den anden enhed skal opdage den accepterede anmodning
Synkronisering af tilbagekaldelsesforespørgsler
Alice har to enheder.
Alice afviser anmodningen om en samtale
Den anden enhed skal opdage den afvist anmodning
Aktuel gennemførelse
gerrit#15584 gennemfører denne side