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:

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

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

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

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