Sinkroniseerimisprotokolli

Räägitakse, et „swarm chat“ pakub iga seadme jaoks uusi võimalusi. Nüüd on võimalik seadmete vahelist ajalugu sünkroneerida, jagades sellega seotud hoiukesi.

Swarm disainidokument määratleb palju stsenaariumid, kuid see ei tähenda, et samade kasutajate seadmete vahelised vestlused sünkroniseeritakse.

Vana meetod

Ta ei saanud kasutada seda, sest kõik väärtused ei tohi ületada 64k, mitte konverteed ei saadetud seadme sünkronaatsides ega liikmete profiilides, sest see on liiga raske.

Vanas meetodis kuulab daemon „inbox:DEVICE_ID“ DeviceSync väärtuste kohta, mis sisaldab sinkroniseerimiseks vajalikku kontaktlista (vt AccountManager::startSync());

Märkus

The current DeviceSync value present on the DHT is deprecated with this draft.

Uus meetod

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

See on stsenaarium, mida kasutatakse sünkroneerimiseks:

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

  2. Teised seadmed (!A) avaldavad selle teate ja paluvad sellele seadmele ConnectionManager kaudu avada uus kanaal nimega „sync://DEVICE_ID_A“. (Linnutus: A saab teate teistest seadmetest, nii et ta palub ka sünkroneerimiskanaleid).

  3. Kui see kanaal avatakse, saadab kanalit küsitav seadme DeviceSync (vt järgmine osa) väärtus, mis sisaldab teadaolevaid vestlusi ja kontakte.

  4. A kontrollib DeviceSync väärtust ja:

    • Kui see tuvastas eemaldatud kontakte, eemaldage kontakte.

    • Lisada kontakte, kui see märgib lisatud kontakte

    • Võtke konvertssioonid välja, kui see märgib eemaldatud konvertssioone

    • Lisage vestlused, kui see märgib lisatud vestlusi

    • Võta konverentsite taotlused ära, kui taotlus on vastuvõetud (nüüd on kõnelused) / keeldunud

    • Lisage vestluse taotlused, kui nad avastatakse

Märkus

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

Seadme sünkroneerimine

See väärtus on JSON, mis sisaldab:

{
    "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:[] } /* ... */
    ],
}

Kasutaja lugusid

Sinkroniseerimine seadme lisamise ajal

  • Alice loob vestluse

  • (valimine) Alice lisada mõned sõnumid

  • Alice lisab veel ühe seadme

  • Teine seadme peaks saama ja sinkroniseerima eelnevalt loodud vestlus

Sinkroniseerimine seadme ühendamisel

  • Alice loob vestluse

  • (valimine) Alice lisada mõned sõnumid

  • Alice ühendas teise seadme

  • Teine seadme peaks saama ja sinkroniseerima eelnevalt loodud vestlus

Mitme seadme vaheline sünkroneerimine

  • Alice sai kaks seadet.

  • Alice loob vestluse

  • Teine seadme peaks saama ja sinkroniseerima ühe seadme kaudu loodud vestlust

Uute taotluste tuvastamiseks sünkroneerimine

  • Alice saab vestlusnõue

  • Alice lisada uus seadme

  • Teine seadme peaks võtma nõuded seadmest A

Sinkroniseerimine vastuvõetud taotluste jaoks

  • Alice’il on kaks seadet.

  • Alice võtab vastu vestlusnõue

  • Teine seadme peaks tuvastama nõutud taotlust

Sinkroniseerimine nõuded tagasi lükata

  • Alice’il on kaks seadet.

  • Alice keeldub kõne taotlusest

  • Teine seadme peaks vastama keeldunud taotlusele

Praegune rakendamine

gerrit#15584 rakendatakse seda lehekülge