Protocollo di sincronizzazione
Il swarm chat offre nuove possibilità per ogni dispositivo. Ora, è possibile sincronizzare la storia tra i dispositivi condividendo il relativo repository.
Molti scenari sono definiti nel documento di progettazione di Swarm, tuttavia, ciò non implica la sincronizzazione delle conversazioni tra dispositivi per lo stesso utente.
Vecchio metodo
La sincronizzazione dei dispositivi è stata effettuata tramite DHT. Poiché ogni valore NON DEVE superare i 64k, le conversazioni non sono state inviate in sincronizzazione dei dispositivi, né i profili dei membri, perché è troppo pesante. Questo è un problema e DEVE essere migliorato.
Nel vecchio metodo, il daemon sta ascoltando su «inbox:DEVICE_ID» per i valori DeviceSync che contiene la lista di contatti da sincronizzare (cfr AccountManager::startSync()
);
Nota
The current DeviceSync value present on the DHT is deprecated with this draft.
Nuovo 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).
Questo è lo scenario usato per sincronizzare:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Altri dispositivi (!A) rilevano l’annuncio e chiedono a questo dispositivo attraverso il ConnectionManager di aprire un nuovo canale chiamato «sync://DEVICE_ID_A». (Nota: A riceverà un annuncio da altri dispositivi, quindi chiederà anche canali di sincronizzazione).
Non appena viene aperto questo canale, il dispositivo che chiede questo canale invierà un valore DeviceSync (cfr. parte successiva) contenente le sue conversazioni e contatti noti.
A controllerà il valore di DeviceSync e:
Rimuovere i contatti se rileva i contatti rimossi
Aggiungere contatti se rileva contatti aggiunti
Elimina le conversazioni se rileva le conversazioni eliminate
Aggiungere conversazioni se rileva conversazioni aggiunte
Elimina le richieste di conversazione se la richiesta è accettata (ora in conversazione) / rifiutata
Aggiungere le richieste della conversazione se rilevato
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).
Sincronizzazione del dispositivo
Questo valore è un JSON contenente:
{
"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:[] } /* ... */
],
}
Storie degli utenti
Sincronizzare quando si aggiunge il dispositivo
Alice crea una conversazione
Alice aggiunge alcuni messaggi
Alice aggiunge un altro dispositivo
L’altro dispositivo dovrebbe ricevere e sincronizzare la conversazione creata in precedenza
Sincronizzare quando si collega un dispositivo
Alice crea una conversazione
Alice aggiunge alcuni messaggi
Alice collega un altro dispositivo
L’altro dispositivo dovrebbe ricevere e sincronizzare la conversazione creata in precedenza
Sincronizzazione tra più dispositivi
Alice ha 2 dispositivi.
Alice crea una conversazione
L’altro dispositivo deve ricevere e sincronizzare la conversazione creata su uno dei dispositivi
Sincronizzazione per rilevare nuove richieste
Alice riceve la richiesta di una conversazione
Alice aggiunge un nuovo dispositivo
L’altro dispositivo deve recuperare le richieste dal dispositivo A
Sincronizzazione delle richieste accettate
Alice ha due dispositivi.
Alice accetta la richiesta di una conversazione
L’altro dispositivo deve rilevare la richiesta accettata
Sincronizzazione per le richieste di rifiuto
Alice ha due dispositivi.
Alice rifiuta la richiesta di una conversazione
L’altro dispositivo deve rilevare la richiesta rifiutata
Attuale attuazione
gerrit#15584 implementa questa pagina