Synchronizačný protokol

Svoj časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový časový

Mnoho scenárov je definovaných v návrhovom dokumente Swarm, ale to neznamená synchronizáciu konverzácií medzi zariadeniami pre rovnakého používateľa.

Stará metóda

Synchronizácia zariadení bola vykonaná prostredníctvom DHT. Pretože každá hodnota MUSI prekročiť 64k, konverzácie neboli odoslané v synchronizácii zariadení, ani profily členov, pretože je príliš ťažké.

V starom spôsobe je daemon počúvajúci na „inbox:DEVICE_ID“ pre hodnoty DeviceSync, ktorý obsahuje zoznam kontaktov, ktoré sa majú synchronizovať (pozri AccountManager::startSync() );

Poznámka

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

Nová metóda

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

Toto je scenár, ktorý sa používa na synchronizáciu:

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

  2. Iné zariadenia (!A) detektujú oznámenie a budú požiadať toto zariadenie prostredníctvom ConnectionManager, aby otvorilo nový kanál s názvom „sync://DEVICE_ID_A“. (Poznámka: A dostane oznámenie z iných zariadení, takže bude požiadať o synchronizovacie kanály tiež).

  3. Hneď ako je tento kanál otvorený, zariadenie, ktoré sa na tento kanál pýta, zasiela hodnotu DeviceSync (pozri ďalšiu časť), ktorá obsahuje jeho známe konverzácie a kontakty.

  4. A skontroluje hodnotu DeviceSync a:

    • Odstránenie kontaktov, ak detektuje odstránené kontakty

    • Pridať kontakty, ak detektuje pridané kontakty

    • Odstráňte konverzácie, ak zistí odstránené konverzácie

    • Pridať konverzácie, ak detektuje pridané konverzácie

    • Odstrániť žiadosti konverzácie, ak je žiadosť prijatá (v súčasnosti v konverzáciách) / odmietnutá

    • Pridajte žiadosti konverzácie, ak je zistená

Poznámka

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

Synchronizácia zariadenia

Táto hodnota je JSON obsahujúci:

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

Príbehy používateľov

Synchronizácia pri pridaní zariadenia

  • Alice vytvára rozhovor

  • (Vybórne) Alice pridať nejaké správy

  • Alice pridá ďalšie zariadenie

  • Druhé zariadenie by malo prijímať a synchronizovať predtým vytvorený rozhovor

Synchronizácia pri pripojení zariadenia

  • Alice vytvára rozhovor

  • (Vybórne) Alice pridať nejaké správy

  • Alice pripojí ďalší zariadenie

  • Druhé zariadenie by malo prijímať a synchronizovať predtým vytvorený rozhovor

Synchronizácia medzi viacerými zariadeniami

  • Alice má 2 zariadenia.

  • Alice vytvára rozhovor

  • Druhé zariadenie by malo prijímať a synchronizovať konverzáciu vytvorenú na jednom z zariadení

Synchronizácia na odhaľovanie nových požiadaviek

  • Alice dostane žiadosť o rozhovor

  • Alice pridať nové zariadenie

  • Druhé zariadenie by malo získať žiadosti z zariadenia A

Synchronizácia pri prijatých žiadostiach

  • Alice má 2 zariadenia.

  • Alice prijme žiadosť o rozhovor

  • Druhé zariadenie by malo odhaliť prijatú žiadosť

Synchronizácia žiadostí o odmietnutie

  • Alice má 2 zariadenia.

  • Alice odmietne žiadosť o rozhovor

  • Druhé zariadenie by malo odhaliť odmietnutiu žiadosti

Aktuálne vykonávanie

gerrit#15584 vykonáva túto stránku