Πρωτόκολλο συγχρονισμού

Η συνομιλία σμήνος παρέχει νέες δυνατότητες για κάθε συσκευή. Τώρα, είναι δυνατόν να συγχρονιστεί το ιστορικό μεταξύ των συσκευών μοιράζοντας το σχετικό αποθετήριο.

Πολλά σενάρια ορίζονται στο έγγραφο σχεδιασμού του σάουρμ.

Παλιά μέθοδος

Η συγχρονισμός συσκευών πραγματοποιήθηκε μέσω του DHT. Επειδή κάθε τιμή δεν πρέπει να υπερβαίνει τα 64k, οι συνομιλίες δεν έστειλαν σε συγχρονισμό συσκευών, ούτε τα προφίλ μελών, επειδή είναι πολύ βαρύ. Αυτό είναι ένα πρόβλημα και πρέπει να βελτιωθεί.

Στην παλιά μέθοδο, το δαίμονα ακούει στο «inbox:DEVICE_ID» για τις τιμές DeviceSync που περιέχει την λίστα επαφών για συγχρονισμό (βλ. AccountManager::startSync() );

Σημείωση

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

Νέα μέθοδος

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

Τώρα, αυτό είναι το σενάριο που χρησιμοποιείται για την συγχρονισμό:

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

  2. Άλλες συσκευές (!A) θα ανιχνεύσουν αυτή την ανακοίνωση και θα ζητήσουν από αυτή τη συσκευή μέσω του ConnectionManager να ανοίξει ένα νέο κανάλι με το όνομα «sync://DEVICE_ID_A». (Περιμνεία: Η A θα λάβει ανακοίνωση από άλλες συσκευές, οπότε θα ζητήσει και κανάλια συγχρονισμού).

  3. Μόλις ανοίξει αυτό το κανάλι, η συσκευή που ζητά από αυτό το κανάλι θα στείλει μια τιμή DeviceSync (βλ. επόμενο μέρος) που περιέχει τις γνωστές συνομιλίες και τις επαφές της.

  4. A θα ελέγξει την τιμή DeviceSync και:

    • Αφαιρέστε επαφές αν ανιχνεύσει αφαιρεμένες επαφές

    • Προσθέστε επαφές αν εντοπίσει προστιθέμενες επαφές

    • Αφαιρέστε τις συνομιλίες αν εντοπίσει τις αφαιρεμένες συνομιλίες

    • Προσθέστε συνομιλίες αν ανιχνεύει πρόσθετες συνομιλίες

    • Απομακρύνετε τα αιτήματα της συζήτησης εάν το αίτημα γίνει αποδεκτό (τώρα σε συζητήσεις) / απορριφθεί

    • Προσθέστε τα αιτήματα της συζήτησης αν εντοπιστούν

Σημείωση

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

Συγχρονισμός συσκευών

Αυτή η τιμή είναι ένα JSON που περιέχει:

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

Ιστορίες χρηστών

Συγχρονισμός κατά την προσθήκη συσκευής

  • Η Άλις δημιουργεί μια συζήτηση.

  • (Επιαιρετικό) Alice προσθέτει μερικά μηνύματα

  • Η Άλις προσθέτει άλλη μια συσκευή.

  • Η άλλη συσκευή θα πρέπει να λαμβάνει και να συγχρονίζει τη συζήτηση που έχει δημιουργηθεί προηγουμένως

Συγχρονισμός κατά την σύνδεση συσκευής

  • Η Άλις δημιουργεί μια συζήτηση.

  • (Επιαιρετικό) Alice προσθέτει μερικά μηνύματα

  • Η Άλις συνδέει μια άλλη συσκευή.

  • Η άλλη συσκευή θα πρέπει να λαμβάνει και να συγχρονίζει τη συζήτηση που έχει δημιουργηθεί προηγουμένως

Συγχρονισμός μεταξύ πολλών συσκευών

  • Η Άλις έχει δύο συσκευές.

  • Η Άλις δημιουργεί μια συζήτηση.

  • Η άλλη συσκευή θα πρέπει να λαμβάνει και να συγχρονίζει τη συνομιλία που δημιουργήθηκε σε μία από τις συσκευές

Συγχρονισμός για την ανίχνευση νέων αιτήσεων

  • Η Άλις λαμβάνει αίτηση για συζήτηση

  • Η Άλις προσθέτει μια νέα συσκευή.

  • Η άλλη συσκευή πρέπει να λαμβάνει τα αιτήματα από την συσκευή Α

Συγχρονισμός για αποδεκτές αιτήσεις

  • Η Άλις έχει 2 συσκευές.

  • Η Άλις δέχεται την αίτηση για συζήτηση.

  • Η άλλη συσκευή πρέπει να ανιχνεύει την αποδεκτή αίτηση

Συγχρονισμός για αιτήσεις απόρριψης

  • Η Άλις έχει 2 συσκευές.

  • Η Άλις αρνείται την αίτηση για συζήτηση.

  • Η άλλη συσκευή πρέπει να ανιχνεύει την άρνηση αίτησης

Συγχρονή εφαρμογή

gerrit#15584 εφαρμόζει αυτή τη σελίδα