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:

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

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

  3. Zodra dit kanaal is geopend, stuurt het apparaat dat dit kanaal vraagt een DeviceSync (zie volgende deel) waarde met zijn bekende gesprekken en contacten.

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