Протокол синхронизације
Сварм чат пружа нове могућности за сва уређаја. Сада је могуће синхронисати историју између уређаја делом се повезаним складиштењем.
Многи сценарии су дефинисани у Свайм дизајнерском документу, међутим, ово не подразумева синхронизацију разговора између уређаја за исте кориснике.
Стари метод
Схенромирање уређаја се врши преко ДХТ-а. Пошто свака вредност НЕ МОЖЕ прећи 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).
Ово је сценарио који се користи за синхронизацију:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Други уређаји (!А) ће открити да најаве и ће тражити од овог уређаја преко ConnectionManager да отвори нови канал под називом „sync://DEVICE_ID_A”. (Примећај: А ће добити најаве од других уређаја, па ће тражити и синхронизационе канале).
Č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.
А ће проверити вредност 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 имплементише ову страницу