Senkronizasyon protokolü
Swarm chat her cihaz için yeni imkanlar sunar. Şimdi, ilgili deposu paylaşarak cihazlar arasında geçmişin senkronizasyonu mümkündür.
{doc}`Swarm tasarım belgesinde birçok senaryo tanımlanmıştır, ancak bu aynı kullanıcı için cihazlar arasındaki konuşmaları senkronize etmemizi gerektirmez.
Eski yöntem
Cihaz senkronizasyonu DHT üzerinden yapıldı. Çünkü her değer 64k’den fazla olmamalıdır, konuşmalar cihaz senkronizasyonunda gönderilmemiştir, veya üye profillerinde, çünkü çok ağır. Bu bir sorun ve geliştirilmelidir.
Eski yöntemde, daemon, senkronize edilmesi gereken iletişim listesini içeren DeviceSync değerleri için “inbox:DEVICE_ID” üzerinde dinliyor (bkz. AccountManager::startSync()
);
Not
The current DeviceSync value present on the DHT is deprecated with this draft.
Yeni yöntem
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).
Şimdi, senaryoyu senkronize etmek için kullanılan senaryo şudur:
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
Diğer cihazlar (!A) bu duyuruyu algılayacak ve bu cihazı ConnectionManager üzerinden “sync://DEVICE_ID_A” adlı yeni bir kanal açmasını isteyecektir.
Bu kanal açıldığında, bu kanaldan soru soran cihaz, bilinen konuşmaları ve iletişimlerini içeren DeviceSync değerini gönderir (bakınız sonraki bölüm).
A DeviceSync değerini kontrol eder ve:
Çıkarılmış bağlantıları tespit ederse bağlantıları kaldır
Eklenen kişiler tespit edilirse bağlantıları ekle
Çıkarılmış sohbetleri tespit ederse sohbetleri kaldır
Eklenen sohbetleri tespit ederse sohbetler ekle
Konuşma isteklerini kaldırın, eğer istek kabul edilirse (şimdi konuşmalarda) / reddedildi
Eğer tespit edilirse sohbet isteklerini ekle
Not
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).
Cihaz Senkronizasyonu
Bu değer JSON’dur ve içerir:
{
"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:[] } /* ... */
],
}
Kullanıcı hikayeleri
Cihaz eklediğinde senkronize
Alice bir konuşma yaratıyor
Alice bazı mesajlar ekliyor.
Alice başka bir cihaz ekliyor.
Diğer cihaz daha önce oluşturulan konuşmayı almalı ve senkronize etmelidir
Cihaz bağlandığında senkronize
Alice bir konuşma yaratıyor
Alice bazı mesajlar ekliyor.
Alice başka bir cihazı bağladı.
Diğer cihaz daha önce oluşturulan konuşmayı almalı ve senkronize etmelidir
Çoklu cihazlar arasındaki senkronizasyon
Alice’in iki aletı var.
Alice bir konuşma yaratıyor
Diğer cihaz, cihazlardan birinde oluşturulan konuşmayı almalı ve senkronize etmelidir.
Yeni istekleri tespit etmek için senkronize
Alice bir konuşma isteğini alır
Alice yeni bir cihaz ekliyor.
Diğer cihaz A cihazından istekleri almalıdır.
Kabul edilen istekler için senkronize
Alice’in iki aletı var.
Alice, konuşma isteğini kabul etti.
Diğer cihaz kabul edilen talebi algılamalıdır.
İtiraz istekleri için senkronize
Alice’in iki aletı var.
Alice, konuşma isteğini reddediyor.
Diğer cihaz reddedilen talebi tespit etmelidir.
Mevcut uygulanma
gerrit#15584 bu sayfayı uyguluyor