Sinkronigprotokolo

La sormo de konversacio disponigas novajn eblojn por ĉiu aparato. Nun, estas eble sinkronigi historion inter aparatoj dividante la rilataj deponejoj. Aparatoj sinkronigo devas esti redifinita por sekvi tiujn ŝanĝojn.

Multaj scenaroj estas difinitaj en la Swarm projektdokumento, aliflanke, tio ne implicas sinkronigon de konversacioj inter aparatoj por la sama uzanto. Kelkaj novaj scenaroj devas esti skribitaj.

Malnova metodo

La aparato sinkronigis estis farita per la DHT. Ĉar ĉiu valoro NE devas superi 64k, konversacioj ne estis senditaj en aparato sinkronigis, nek membroj profiloj, ĉar ĝi estas tro peza. Tio estas problemo kaj devas esti plibonigita.

En la malnova metodo, la demono aŭskultas en “inbox:DEVICE_ID” por DeviceSync valoroj kiu enhavas la kontaktliston sinkronigi (cf. AccountManager::startSync() );

Note

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

Nova metodo

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

Jen la scenaro uzata por sinkronigi:

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

  2. Aliaj aparatoj (!A) detektos tiun sciigon kaj petos tiun aparaton tra la ConnectionManager por malfermi novan kanalon nomitan “sync://DEVICE_ID_A”. (Noto: A ricevos sciigon de aliaj aparatoj, do ĝi petos sinkronigkanalojn ankaŭ).

  3. Tuj kiam tiu kanalo estas malfermita, la aparato kiu petas tiun kanalon sendos DeviceSync (vidu sekvan parton) valoro enhavanta ĝiajn konatajn konversaciojn kaj kontaktojn.

  4. A kontrolos la DeviceSync valoro kaj:

    • Forigu kontaktojn se ĝi detektas forigitajn kontaktojn

    • Aldonu kontaktojn se ĝi detektas aldonajn kontaktojn

    • Forigu konversaciojn, se ĝi detektas forigitajn konversaciojn

    • Aldonu konversaciojn se ĝi detektas aldonajn konversaciojn

    • Forigu la petojn de konversacio se peto estas akceptita (nun en konversacioj) / malakceptita

    • Aldonu la petojn de konversacio se detektita

Note

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

Device Sync

Tiu valoro estas JSON enhavanta:

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

Uzantaj rakontoj

Sinkronigu kiam aldoni aparaton

  • Alice kreas konversacion

  • (Ponebla) Alice aldonas kelkajn mesaĝojn

  • Alice aldonas alian aparaton

  • La alia aparato devas ricevi kaj sinkronigi la konversacion antaŭe kreita

Sinkronigu kiam konekti aparaton

  • Alice kreas konversacion

  • (Ponebla) Alice aldonas kelkajn mesaĝojn

  • Alice konektas alian aparaton

  • La alia aparato devas ricevi kaj sinkronigi la konversacion antaŭe kreita

Sinkronigo inter pluraj aparatoj

  • Alice havas du aparatojn.

  • Alice kreas konversacion

  • La alia aparato devas ricevi kaj sinkronigi la konversacion kreita sur unu el la aparatoj

Sinkronizo por detekti novajn petojn

  • Alice ricevas la peton por konversacio

  • Alice aldonas novan aparaton

  • La alia aparato devas retrovi la petojn de aparato A

Sinkronigo por akceptitaj petoj

  • Alice havas 2 aparatojn.

  • Alice akceptas la peton por konversacio

  • La alia aparato devas detekti la akceptitan peton

Sinkronizo por rezigno petoj

  • Alice havas 2 aparatojn.

  • Alice rifuzas la peton por konversacio

  • La alia aparato devas detekti la rifuzitan peton

Aktuala efektivigo

gerrit#15584 efektivigas ĉi tiun paĝon