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:

  1. When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.

  2. 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å).

  3. 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.

  4. 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