Synchronisatieprotocol
De swarm chat biedt nieuwe mogelijkheden voor elk apparaat. Nu is het mogelijk om geschiedenis tussen apparaten te synchroniseren door het delen van de gerelateerde opslagplaats.
Veel scenario’s zijn gedefinieerd in het Swarm design document, maar dit impliceert niet dat conversaties tussen apparaten voor dezelfde gebruiker worden gesynchroniseerd.
Oude methode
De synchronisatie van apparaten werd uitgevoerd via de DHT. Omdat elke waarde MUST NIE meer dan 64k, gesprekken werden niet gestuurd in apparaatsynchronisatie, noch lid profielen, omdat het te zwaar is. Dit is een probleem en moet worden verbeterd.
In de oude methode luistert de daemon op “inbox:DEVICE_ID” naar DeviceSync-waarden die de contactlijst bevat om te synchroniseren (zie AccountManager::startSync()
);
Notitie
The current DeviceSync value present on the DHT is deprecated with this draft.
Nieuwe methode
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).
Dit is het scenario dat wordt gebruikt om te synchroniseren:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Andere apparaten (!A) zullen die aankondiging detecteren en zullen dit apparaat via de ConnectionManager vragen om een nieuw kanaal met de naam “sync://DEVICE_ID_A” te openen.
Zodra dit kanaal is geopend, stuurt het apparaat dat dit kanaal vraagt een DeviceSync (zie volgende deel) waarde met zijn bekende gesprekken en contacten.
A controleert de DeviceSync-waarde en:
Verwijder contacten als het verwijderde contacten detecteert
Voeg contacten toe als het toegevoegde contacten detecteert
Verwijder gesprekken als het verwijderde gesprekken detecteert
Voeg gesprekken toe als het extra gesprekken detecteert
Verwijder de gespreksaanvragen als het verzoek is aanvaard (nu in gesprekken) / geweigerd
Voeg gespreksaanvragen toe als ze worden gedetecteerd
Notitie
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).
Synchronisatie van apparaten
Deze waarde is een JSON met:
{
"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:[] } /* ... */
],
}
Gebruikersverhalen
Synchroniseren bij het toevoegen van apparaat
Alice maakt een gesprek
Alice voegt enkele berichten toe.
Alice voegt een ander apparaat toe.
Het andere apparaat moet het gesprek ontvangen en synchroniseren dat eerder is gemaakt
Synchroniseren bij het aansluiten van een apparaat
Alice maakt een gesprek
Alice voegt enkele berichten toe.
Alice verbindt een ander apparaat.
Het andere apparaat moet het gesprek ontvangen en synchroniseren dat eerder is gemaakt
Synchronisatie tussen meerdere apparaten
Alice heeft twee apparaten.
Alice maakt een gesprek
Het andere apparaat moet het gesprek ontvangen en synchroniseren dat op een van de apparaten is gemaakt.
Synchronisatie voor het detecteren van nieuwe verzoeken
Alice ontvangt een verzoek om een gesprek
Alice voegt een nieuw apparaat toe
Het andere apparaat moet de verzoeken van apparaat A ophalen
Synchronisatie van aanvaarde verzoeken
Alice heeft 2 apparaten.
Alice accepteert het verzoek om een gesprek
Het andere apparaat moet het aanvaarde verzoek detecteren
Synchronisatie voor afwijzingsverzoeken
Alice heeft 2 apparaten.
Alice weigert een gesprek.
Het andere apparaat moet het afgewezen verzoek detecteren
Huidige uitvoering
gerrit#15584 implementeert deze pagina