Synkroniseringsprotokoll
Det är möjligt att synkronisera historiken mellan enheter genom att dela det relaterade arkivet.
Många scenarier definieras i Swarm designdokumentet, men detta innebär inte att samtal mellan enheter för samma användare synkroniseras.
Gamla metoder
Sammanställning av enheter gjordes via DHT. Eftersom varje värde MÅSTE INTE överstiga 64k, samtal skickades inte i enhetssynkronisering, inte heller medlemsprofiler, eftersom det är för tungt. Detta är ett problem och MÅSTE förbättras.
I den gamla metoden lyssnar daemon på ”inbox:DEVICE_ID” för DeviceSync-värden som innehåller kontaktlistan för synkronisering (se AccountManager::startSync()
);
Observera
The current DeviceSync value present on the DHT is deprecated with this draft.
Ny metod
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).
Det här är scenariot som används för att synkronisera:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Andra enheter (!A) kommer att upptäcka det meddelandet och kommer att be denna enhet via ConnectionManager att öppna en ny kanal som heter ”sync://DEVICE_ID_A”. (Nota: A kommer att få meddelande från andra enheter, så det kommer att be om synkronisering kanaler också).
När denna kanal öppnas skickar den enhet som begär denna kanal ett DeviceSync-värde (se nästa del) som innehåller dess kända samtal och kontakter.
A kontrollerar DeviceSync-värdet och:
Ta bort kontakter om det upptäcker borttagna kontakter
Lägg till kontakter om det upptäcker läggs till kontakter
Ta bort samtal om det upptäcker borttagna samtal
Lägg till samtal om det upptäcker att det finns fler samtal
Ta bort samtalens förfrågningar om begäran accepteras (nu i samtal) / avvisas
Lägg till samtalens begär om det upptäcks
Observera
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).
Anordning synkronisering
Detta värde är en JSON-format som innehåller:
{
"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:[] } /* ... */
],
}
Användarhistorier
Synkronisera när enheten läggs till
Alice skapar ett samtal
Alice lägger till några meddelanden
Alice lägger till en annan enhet
Den andra enheten ska ta emot och synkronisera den samtal som tidigare skapats
Synkronisera när en enhet ansluts
Alice skapar ett samtal
Alice lägger till några meddelanden
Alice ansluter en annan enhet.
Den andra enheten ska ta emot och synkronisera den samtal som tidigare skapats
Synkronisering mellan flera enheter
Alice har två enheter.
Alice skapar ett samtal
Den andra enheten ska ta emot och synkronisera den samtal som skapats på en av enheterna
Synkronisering för att upptäcka nya förfrågningar
Alice får en begäran om samtal
Alice lägger till en ny enhet
Den andra enheten ska hämta begäran från enheten A
Synkronisering av accepterade förfrågningar
Alice har två enheter.
Alice accepterar en begäran om ett samtal
Den andra anordningen ska upptäcka den godkända begäran.
Synkronisering av avslagsanställningar
Alice har två enheter.
Alice vägrar en begäran om samtal
Den andra enheten ska upptäcka den avvisade begäran.
Aktuell genomförande
gerrit#15584 genomför denna sida