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:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
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).
Setelah saluran ini dibuka, perangkat yang meminta saluran ini akan mengirim nilai DeviceSync (lihat bagian berikutnya) yang berisi percakapan dan kontak yang diketahui.
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