پروتکل همغږی

چت سوره امکاناتی جدید برای هر دستگاه را فراهم می کند. اکنون، امکان هم وقت سازی تاریخچه بین دستگاه ها با به اشتراک گذاشتن مخزن مربوطه وجود دارد. هم وقت سازی دستگاه ها باید برای پیگیری این تغییرات تعریف شود.

بسیاری از سناریوهای تعریف شده در سند طراحی Swarm، با این حال، این به معنای هم وقت سازی مکالمه بین دستگاه ها برای همان کاربر نیست. برخی سناریوهای جدید باید نوشته شوند.

روش قدیمی

همگام سازی دستگاه از طریق DHT انجام شد. چون هر مقدار نباید بیش از 64k باشد، مکالمه ها در همگام سازی دستگاه و همچنین پروفایل های عضو ارسال نشده است، زیرا این خیلی سنگین است. این یک مشکل است و باید بهبود یابد.

در روش قدیمی، دیمون در "inbox:DEVICE_ID" برای ارزش های DeviceSync گوش می دهد که حاوی لیست تماس برای همبستگی است (ببینید AccountManager::startSync());

** یادداشت:** ارزش فعلی DeviceSync موجود در DHT با این طرح منسوخ شده است.

روش جدید

از آنجا که Jami دارای ConnectionManager است، با استفاده از سوکت p2p امکان انجام همگام سازی سریع با ارزش های بزرگ (چون سوکت محدود به داده ها نیست)

حالا، این سناریو برای همگام سازی استفاده شده:

  1. وقتی دستگاه (A) به کار می رود، از طریق یک اعلامیه دستگاه مانند روش قدیمی، حضور خود را اعلام می کند.

  2. سایر دستگاه ها (!A) این اعلامیه را تشخیص می دهند و از این دستگاه از طریق ConnectionManager می خواهند که یک کانال جدید با نام "sync://DEVICE_ID_A" را باز کند. (نوتی: A از سایر دستگاه ها اعلامیه دریافت می کند، بنابراین از کانال های همگام سازی نیز می خواهد).

  3. به محض باز کردن این کانال، دستگاه که از این کانال درخواست می کند، یک مقدار DeviceSync (به بخش بعدی) را ارسال می کند که شامل مکالمه و تماس های شناخته شده آن است.

  4. A ارزش DeviceSync را بررسی می کند و:

    • تماس ها را حذف کنید اگر تماس های حذف شده را تشخیص دهد

    • اگر تماس های اضافه شده را تشخیص دهد، تماس ها را اضافه کنید

    • مکالمات را حذف کنید اگر مکالمات حذف شده را تشخیص دهد

    • اگر گفتگوهای اضافه شده را تشخیص دهد، گفتگوهای اضافه شده را اضافه کنید

    • درخواست های مکالمه را حذف کنید اگر درخواست پذیرفته شده (در حال حاضر در مکالمه) / رد شده است

    • اگر شناسایی شود درخواست های مکالمه را اضافه کنید

توجه: اگر A مکالمات جدید را تشخیص دهد، از دستگاه که این مکالمات را اعلام کرده است می خواهد که از طریق یک کانال git (مانند آنچه در 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:[] } /* ... */
    ],
}

داستان های کاربر

هم وقت سازی هنگام اضافه کردن دستگاه

  • آليس يه مکالمه اي رو شروع ميکنه

  • (اختياري) آليس چندتا پيغام اضافه کرد

  • آليس يه دستگاه ديگه اضافه ميکنه

  • دستگاه دیگر باید مکالمه ای که قبلاً ایجاد شده است را دریافت و همگام سازی کند

همگام سازی هنگام اتصال دستگاه

  • آليس يه مکالمه اي رو شروع ميکنه

  • (اختياري) آليس چندتا پيغام اضافه کرد

  • آليس يه دستگاه ديگه رو وصل ميکنه

  • دستگاه دیگر باید مکالمه ای که قبلاً ایجاد شده است را دریافت و همگام سازی کند

همگام سازی بین دستگاه های متعدد

  • آليس دو دستگاه داره

  • آليس يه مکالمه اي رو شروع ميکنه

  • دستگاه دیگر باید مکالمه ای را که در یکی از دستگاه ها ایجاد شده است دریافت و همگام سازی کند

همگام سازی برای تشخیص درخواست های جدید

  • آليس درخواست مکالمه رو دریافت کرد

  • آليس يه دستگاه جديد اضافه کرد

  • دستگاه دیگر باید درخواست ها را از دستگاه A بازیافت کند

همگام سازی برای درخواست های پذیرفته شده

  • آليس دو دستگاه داره

  • آليس درخواست صحبت رو قبول کرد

  • دستگاه دیگر باید درخواست پذیرفته شده را تشخیص دهد

همگام سازی برای درخواست های رد

  • آليس دو دستگاه داره

  • آليس درخواست صحبت رو رد کرد

  • دستگاه دیگر باید درخواست رد شده را تشخیص دهد

اجرای فعلی

gerrit#15584 این صفحه را اجرا می کند