Synchronisierungsprotokoll

Der Schwarm-Chat bietet neue Möglichkeiten für jedes Gerät. Jetzt ist es möglich, die Geschichte zwischen Geräten zu synchronisieren, indem das entsprechende Repository geteilt wird. Geräte-Synchronisierung muss neu definiert werden, um diesen Änderungen zu folgen.

Viele Szenarien sind im Swarm Design Dokument definiert, dies bedeutet jedoch nicht, dass Gespräche zwischen Geräten für den gleichen Benutzer synchronisiert werden.

Alte Methode

Die Geräte-Synchronisierung wurde über die DHT durchgeführt. Da jeder Wert nicht über 64k hinausgehen darf, wurden Gespräche weder in Geräte-Synchronisierung noch in Mitgliedsprofilen gesendet, weil es zu schwer ist. Dies ist ein Problem und muss verbessert werden.

In der alten Methode hört der Daemon auf „inbox:DEVICE_ID“ für DeviceSync-Werte, die die Kontaktliste enthält, um synchronisiert zu werden (vgl. AccountManager::startSync() );

Bemerkung

The current DeviceSync value present on the DHT is deprecated with this draft.

Neue 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).

Das ist das Szenario, das zur Synchronisierung verwendet wird:

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

  2. Andere Geräte (!A) werden die Ankündigung erkennen und dieses Gerät über den ConnectionManager bitten, einen neuen Kanal namens „sync://DEVICE_ID_A“ zu öffnen. (Hinweis: A wird Ankündigungen von anderen Geräten erhalten, so dass es auch Synchronisationskanäle anfordert).

  3. Sobald dieser Kanal geöffnet ist, sendet das Gerät, das diesen Kanal anfordert, einen DeviceSync (vgl. nächster Teil) Wert mit seinen bekannten Gesprächen und Kontakten.

  4. A überprüft den DeviceSync-Wert und:

    • Entfernen Sie Kontakte, wenn er entfernte Kontakte erkennt

    • Hinzufügen von Kontakten, wenn er Hinzufügen von Kontakten erkennt

    • Entfernen Sie Gespräche, wenn sie entfernte Gespräche erkennt

    • Fügen Sie Gespräche hinzu, wenn es zusätzliche Gespräche erkennt

    • Entfernen Sie die Anfragen des Gesprächs, wenn die Anfrage angenommen wird (jetzt in Gesprächen) / abgelehnt

    • Fügen Sie Gesprächsanfragen hinzu, wenn sie entdeckt werden

Bemerkung

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

Gerätensynchronisierung

Dieser Wert ist ein JSON mit:

{
    "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:[] } /* ... */
    ],
}

Benutzergeschichten

Synchronisieren beim Hinzufügen von Geräten

  • Alice erzeugt ein Gespräch

  • (Optional) Alice fügt einige Nachrichten hinzu

  • Alice fügt ein anderes Gerät hinzu.

  • Das andere Gerät sollte die zuvor erstellte Konversation empfangen und synchronisieren

Synchronisieren beim Anschließen eines Geräts

  • Alice erzeugt ein Gespräch

  • (Optional) Alice fügt einige Nachrichten hinzu

  • Alice verbindet ein anderes Gerät

  • Das andere Gerät sollte die zuvor erstellte Konversation empfangen und synchronisieren

Synchronisierung zwischen mehreren Geräten

  • Alice hat 2 Geräte.

  • Alice erzeugt ein Gespräch

  • Das andere Gerät sollte die auf einem der Geräte erstellte Konversation empfangen und synchronisieren

Synchronisierung zur Erkennung neuer Anfragen

  • Alice erhält eine Anfrage nach einem Gespräch

  • Alice fügt ein neues Gerät hinzu.

  • Die andere Anlage muss die Anfragen von Anlage A abrufen

Synchronisierung für angenommenen Anfragen

  • Alice hat 2 Geräte.

  • Alice akzeptiert die Bitte um Gespräch

  • Das andere Gerät sollte den angenommenen Antrag erkennen

Synchronisierung für Ablehnungsanfragen

  • Alice hat 2 Geräte.

  • Alice lehnt die Anfrage ab.

  • Das andere Gerät sollte die abgelehnte Anfrage erkennen

Aktuelle Umsetzung

gerrit#15584 implementiert diese Seite