Protokol sinkronisasi

Chat swarm memberikan kemungkinan baru untuk setiap perangkat. Sekarang, mungkin untuk menyinkronkan sejarah antara perangkat dengan berbagi repositori terkait.

Banyak skenario didefinisikan dalam dokumen desain Swarm, namun, ini tidak berarti untuk menyinkronkan percakapan antara perangkat untuk pengguna yang sama. Beberapa skenario baru harus ditulis.

Metode lama

Karena setiap nilai tidak harus melebihi 64k, percakapan tidak dikirim dalam sinkronisasi perangkat, atau profil anggota, karena terlalu berat. Ini adalah masalah dan harus diperbaiki.

Dalam metode lama, daemon mendengarkan pada "inbox:DEVICE_ID" untuk nilai DeviceSync yang berisi daftar kontak untuk disinkronkan (lihat AccountManager::startSync() );

Catatan

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

Metode baru

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

Sekarang, ini adalah skenario yang digunakan untuk menyinkronkan:

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

  2. Perangkat lain (!A) akan mendeteksi pengumuman dan akan meminta perangkat ini melalui ConnectionManager untuk membuka saluran baru bernama "sync://DEVICE_ID_A". (Catatan: A akan menerima pengumuman dari perangkat lain, jadi akan meminta saluran sinkronisasi juga).

  3. Setelah saluran ini dibuka, perangkat yang meminta saluran ini akan mengirim nilai DeviceSync (lihat bagian berikutnya) yang berisi percakapan dan kontak yang diketahui.

  4. A akan memeriksa nilai DeviceSync dan:

    • Hapus kontak jika deteksi kontak yang telah dihapus

    • Tambahkan kontak jika deteksi kontak ditambahkan

    • Hapus percakapan jika itu mendeteksi percakapan yang telah dihapus

    • Tambahkan percakapan jika itu mendeteksi percakapan tambahan

    • Hapus permintaan percakapan jika permintaan diterima (sekarang dalam percakapan) / ditolak

    • Tambahkan permintaan percakapan jika terdeteksi

Catatan

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

Sync Device

Nilai ini adalah JSON yang berisi:

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

Kisah pengguna

Sync saat menambahkan perangkat

  • Alice menciptakan percakapan

  • (Pilih) Alice menambahkan beberapa pesan

  • Alice menambahkan perangkat lain

  • Perangkat lain harus menerima dan menyinkronkan percakapan yang dibuat sebelumnya

Sync saat menghubungkan perangkat

  • Alice menciptakan percakapan

  • (Pilih) Alice menambahkan beberapa pesan

  • Alice menghubungkan perangkat lain

  • Perangkat lain harus menerima dan menyinkronkan percakapan yang dibuat sebelumnya

Sync antara beberapa perangkat

  • Alice punya 2 perangkat

  • Alice menciptakan percakapan

  • Perangkat lain harus menerima dan menyinkronkan percakapan yang dibuat pada salah satu perangkat

Sync untuk mendeteksi permintaan baru

  • Alice menerima permintaan untuk percakapan

  • Alice menambahkan perangkat baru

  • Perangkat lain harus mengambil permintaan dari perangkat A

Sync untuk permintaan yang diterima

  • Alice memiliki 2 perangkat

  • Alice menerima permintaan untuk berbicara

  • Perangkat lain harus mendeteksi permintaan yang diterima

Sync untuk permintaan penolakan

  • Alice memiliki 2 perangkat

  • Alice menolak permintaan untuk berbicara

  • Perangkat lain harus mendeteksi permintaan yang ditolak

Implementasi saat ini

gerrit#15584 menerapkan halaman ini