Sinkronizazio protokoloa

Gailu guztiek aukera berriak dituzte, eta gailuen arteko historia sinkronizatu ahal izango da.

Eszenario asko definitu dira Swarm diseinu dokumentuan, baina horrek ez du esan nahi erabiltzaile beraren artean elkarrizketak sinkronizatzeko.

Metodo zaharra

Gailuen sinkronizazioa DHT bidez egin zen. balio bakoitzak 64k gainditu behar ez duelako, ez dira elkarrizketak bidali gailuen sinkronizaziorako, ezta kideen profiletan ere, oso astuna delako.

Metodo zaharrean, daemonak entzuten du «inbox:DEVICE_ID» DeviceSync balioak, sinkronizatzeko kontaktuen zerrenda duena (ie. AccountManager::startSync() );

Oharra

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

Metodo berria

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

Hau da sinkronizatzeko erabiltzen den eszenatokia:

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

  2. Beste gailu batzuek (!A) iragarkia detektatuko dute eta gailu honi eskatuko dio ConnectionManager bidez «sync://DEVICE_ID_A» izeneko kanala irekitzeko.

  3. Kanala irekitzen denean, kanal hau eskatzen ari den gailuak bere elkarrizketak eta kontaktuak dituen DeviceSync balioa bidaliko du (ikus hurrengo zatia).

  4. Aek DeviceSync balioa egiaztatuko du eta:

    • Kendu kontaktuak, kentutako kontaktuak aurkitzen baditu.

    • Kontaktua gehitu, kontaktu gehituak aurkitzen baditu

    • Kendu elkarrizketak, deskubritzen baditu

    • Gehitu elkarrizketak, elkarrizketa gehituak aurkitzen baditu

    • Kendu elkarrizketaren eskaerak, eskaera onartuta bada (orain elkarrizketetan) / ezeztatuta

    • Kontaeraren eskaerak gehitu, aurkitzen badituzte

Oharra

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

Gailuaren sinkronizazioa

Balio hau JSON bat da, hau duena:

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

Erabiltzaileen istorioak

Dispositiboa gehitzerakoan sinkronizatu

  • Alice elkarrizketa bat sortzen ari da.

  • Alice-k mezu batzuk gehitu ditu.

  • Alice beste gailu bat gehitzen ari da.

  • Beste gailuak jaso eta sinkronizatu beharko du aurrekoan sortutako elkarrizketa.

Diskoa konektatzen denean sinkronizatu

  • Alice elkarrizketa bat sortzen ari da.

  • Alice-k mezu batzuk gehitu ditu.

  • Alice beste gailu bat konektatzen ari da.

  • Beste gailuak jaso eta sinkronizatu beharko du aurrekoan sortutako elkarrizketa.

Gailu askoren arteko sinkronizazioa

  • Alice-k bi gailu ditu.

  • Alice elkarrizketa bat sortzen ari da.

  • Beste gailuak hartu eta sinkronizatu behar du gailuetako batean sortutako elkarrizketa

Eskari berriak detektatzeko sinkronizazioa

  • Alice-k elkarrizketa eskaera jasotzen du.

  • Alice-k gailu berri bat gehitu du.

  • Beste gailuak A gailutik jaso behar ditu eskaerak.

Onartu diren eskaeren sinkronizazioa

  • Alice-k bi gailu ditu.

  • Alice elkarrizketa eskaera onartzen du

  • Beste gailuak onartutako eskaera antzeman beharko luke.

Ezetz eskatzeko eskaeren sinkronizazioa

  • Alice-k bi gailu ditu.

  • Alice-k ez du onartzen elkarrizketa eskaera.

  • Beste gailuak ezeztatu egin den eskaera detektatu beharko du.

Egiteko egungo egintza

gerrit#15584 orri hau gauzatzen da