Protocol de sincronizació
El swarm chat ofereix noves possibilitats per a cada dispositiu. Ara, és possible sincronizar l’història entre dispositius compartint el repositori relacionat.
Molts escenaris estan definits en el document de disseny de Swarm, però això no implica la sincronizació de converses entre dispositius per al mateix usuari.
Antic mètode
La sincronizació de dispositius es va fer a través del DHT. Perquè cada valor NO ha de superar 64k, les converses no s’han enviat en sincronizació de dispositius, ni perfiles de membres, perquè és massa pesant.
En l’antic mètode, el daemon està escoltant en «inbox:DEVICE_ID» per als valors DeviceSync que conté la llista de contactes per sincronizar (cf. AccountManager::startSync()
);
Nota
The current DeviceSync value present on the DHT is deprecated with this draft.
Nou mètode
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).
Ara, aquest és el escenari utilitzat per sincronizar:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Altres dispositius (!A) detectaran aquest anunci i demanarà a aquest dispositiu a través del ConnectionManager que obri un nou canal anomenat «sync://DEVICE_ID_A». (Nota: A obté anuncis d’altres dispositius, així que demanarà també els canals de sincronizació).
Tan aviat com es obrir aquest canal, el dispositiu que sol·licita aquest canal enviarà un valor DeviceSync (cf. següent part) que conté les seves converses i contactes conegudes.
A comprovarà el valor DeviceSync i:
Eliminar contactes si detecta contactes eliminats
Agrega contactes si detecta contactes afegits
Eliminar converses si detecta converses eliminades
Agrega converses si detecta converses afegides
Eliminar les peticions de la conversa si la petició és acceptada (ara en converses) / rebutjada
A més, afegir les peticions de la conversa si es detecta
Nota
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).
Sincronizació d’aparell
Aquest valor és un JSON que conté:
{
"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":[] }
/* ... */
],
}
Històries d’usuari
Sincronizació quan s’afegeix dispositiu
Alice crea una conversa
(Optional) Alice afegir alguns missatges
Alice agrega un altre dispositiu
L’altre dispositiu ha de rebre i sincronizar la conversa creada prèviament
Sincronizació quan connecta un dispositiu
Alice crea una conversa
(Optional) Alice afegir alguns missatges
Alice connecta un altre dispositiu
L’altre dispositiu ha de rebre i sincronizar la conversa creada prèviament
Sincronizació entre múltiples dispositius
Alice té 2 dispositius.
Alice crea una conversa
L’altre dispositiu ha de rebre i sincronizar la conversa creada en un dels dispositius
Sincronizació per detectar noves peticions
Alice rebeu la petició d’una conversa
Alice afegir un nou dispositiu
L’altre dispositiu ha de recuperar les peticions del dispositiu A
Sincronizació per a les peticions acceptades
Alice té 2 dispositius.
Alice accepta la petició d’una conversa
L’altre dispositiu ha de detectar la petició acceptada
Sincronizació per a les peticions de declinació
Alice té 2 dispositius.
Alice rechaza la petició d’una conversa
L’altre dispositiu ha de detectar la petició rebutjada
Implementació actual
gerrit#15584 implementa aquesta pàgina