Протокол синхронизације

Сварм чат пружа нове могућности за сва уређаја. Сада је могуће синхронисати историју између уређаја делом се повезаним складиштењем.

Многи сценарии су дефинисани у Свайм дизајнерском документу, међутим, ово не подразумева синхронизацију разговора између уређаја за исте кориснике.

Стари метод

Схенромирање уређаја се врши преко ДХТ-а. Пошто свака вредност НЕ МОЖЕ прећи 64K, разговори нису послати у синхронизацији уређаја, нити профили чланова, јер је превише тешка.

У старој методи, демона слуша на „inbox:DEVICE_ID” за вредности DeviceSync који садржи листу контаката за синхронизацију (ср. AccountManager::startSync() );

Белешка

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

Нова метода

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

Ово је сценарио који се користи за синхронизацију:

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

  2. Други уређаји () ће открити да најаве и ће тражити од овог уређаја преко ConnectionManager да отвори нови канал под називом „sync://DEVICE_ID_A”. (Примећај: А ће добити најаве од других уређаја, па ће тражити и синхронизационе канале).

  3. Čim se ovaj kanal otvori, uređaj koji traži ovaj kanal će poslati vrednost DeviceSinc (uporedi sledeći deo) koja sadrži njegove poznate razgovore i kontakte.

  4. А ће проверити вредност DeviceSync и:

    • Ukloni kontakte ako otkrije uklonjene kontakte

    • Dodajte kontakte ako otkrije dodate kontakte

    • Ukloni prepiske ako otkrije uklonjene konverzacije

    • Dodajte prepiske ako otkrije dodate razgovore

    • Улучите захтеве разговора ако је захтев прихваћен (сада у разговору) / одбијен

    • Додајте захтеве за разговор ако се открије

Белешка

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

Синхронизација уређаја

Ова вредност је JSON који садржи:

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

Приче корисника

Синхронизација при додавању уређаја

  • Alisa otvara razgovor

  • Алис додаје неке поруке.

  • Алис додаје још један уређај

  • Drugi uređaj bi trebalo da primi i sinhronizuje prethodno kreiran razgovor

Синхронизација када се уређај повезује

  • Alisa otvara razgovor

  • Алис додаје неке поруке.

  • Алис повезује још један уређај

  • Drugi uređaj bi trebalo da primi i sinhronizuje prethodno kreiran razgovor

Синхронизација између више уређаја

  • Алис је имала два уређаја.

  • Alisa otvara razgovor

  • Drugi uređaj bi trebalo da primi i sinhronizuje razgovor kreiran na jednom od uređaja

Синхронизација за откривање нових захтева

  • Алиса добија захтев за разговор

  • Алис додаје нови уређај

  • Други уређај треба да извлече захтеве из уређаја А

Синхронизација прихваћених захтева

  • Алиса има 2 уређаја.

  • Алиса прихвати захтев за разговор

  • Други уређај треба да открије прихваћен захтев

Синхронизација за захтеве за отказ

  • Алиса има 2 уређаја.

  • Алиса одбија захтев за разговор

  • Други уређај треба да открије одбијену захтев

Актуелна спровођење

gerrit#15584 имплементише ову страницу