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:

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

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

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

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