समक्रमण प्रोटोकॉल

हर डिवाइस के लिए नए अवसर प्रदान करता है। अब, संबंधित भंडारण साझा करके उपकरणों के बीच इतिहास को सिंक्रनाइज़ करना संभव है। इन परिवर्तनों का पालन करने के लिए डिवाइस सिंक्रनाइज़ेशन को फिर से परिभाषित करने की आवश्यकता है।

{doc}`Swarm डिजाइन दस्तावेज़ में कई परिदृश्य परिभाषित किए गए हैं, हालांकि, इसका मतलब यह नहीं है कि एक ही उपयोगकर्ता के लिए उपकरणों के बीच बातचीत को सिंक्रनाइज़ किया जाए। कुछ नए परिदृश्य लिखे जाने चाहिए।

पुरानी विधि

डिवाइस सिंक्रनाइज़ेशन DHT के माध्यम से किया गया था। क्योंकि हर मान 64k से अधिक नहीं होना चाहिए, बातचीत डिवाइस सिंक्रनाइज़ेशन में नहीं भेजी गई थी, न ही सदस्य प्रोफाइल, क्योंकि यह बहुत भारी है। यह एक समस्या है और सुधार किया जाना चाहिए।

पुरानी विधि में, डेमोन "इनबॉक्सःDEVICE_ID" पर सुन रहा है DeviceSync मानों के लिए जिसमें समक्रमण करने के लिए संपर्क सूची शामिल है (cf. AccountManager::startSync() );

टिप्पणी

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

नई विधि

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

अब, यह है परिदृश्य सिंक्रनाइज़ करने के लिए इस्तेमाल कियाः

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

  2. अन्य डिवाइस (!A) उस घोषणा का पता लगाएंगे और ConnectionManager के माध्यम से इस डिवाइस से "sync://DEVICE_ID_A" नामक एक नया चैनल खोलने के लिए कहेंगे। (नोटः A अन्य उपकरणों से घोषणा प्राप्त करेगा, इसलिए यह सिंक्रनाइज़ेशन चैनलों के लिए भी पूछता है) ।

  3. इस चैनल को खोलने के तुरंत बाद, इस चैनल को पूछने वाला डिवाइस DeviceSync (अनुच्छेद अगले भाग) मान भेज देगा जिसमें उसके ज्ञात वार्तालाप और संपर्क शामिल हैं।

  4. A DeviceSync मान की जांच करेगा औरः

    • संपर्क हटाएं यदि यह हटाए गए संपर्क का पता लगाता है

    • जोड़ें संपर्क अगर यह जोड़ने संपर्क का पता लगाता है

    • यदि यह हटाए गए वार्तालापों का पता लगाता है तो वार्तालापों को हटा दें

    • बातचीत जोड़ें यदि यह अतिरिक्त वार्तालापों का पता लगाता है

    • वार्तालाप के अनुरोधों को हटा दें यदि अनुरोध स्वीकार किया गया है (अब वार्तालाप में) / अस्वीकार कर दिया गया है

    • यदि पता चला तो वार्तालाप के अनुरोध जोड़ें

टिप्पणी

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

डिवाइस सिंक्रनाइज़ेशन

यह मान एक 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":[] }
        /* ... */
    ],
}

उपयोगकर्ता कहानियाँ

डिवाइस जोड़ने पर समक्रमण

  • एलिस एक बातचीत बनाता है

  • (वैकल्पिक) एलिस कुछ संदेश जोड़ें

  • एलिस एक और उपकरण जोड़ता है

  • दूसरे डिवाइस को पहले बनाई गई बातचीत को प्राप्त करना और उसे सिंक करना चाहिए

डिवाइस को कनेक्ट करते समय सिंक्रनाइज़ करें

  • एलिस एक बातचीत बनाता है

  • (वैकल्पिक) एलिस कुछ संदेश जोड़ें

  • एलिस एक और डिवाइस कनेक्ट करता है

  • दूसरे डिवाइस को पहले बनाई गई बातचीत को प्राप्त करना और उसे सिंक करना चाहिए

कई उपकरणों के बीच समक्रमण

  • एलिस के पास 2 डिवाइस हैं

  • एलिस एक बातचीत बनाता है

  • दूसरे डिवाइस को डिवाइस में से एक पर बनाई गई बातचीत को प्राप्त करना और सिंक्रनाइज़ करना चाहिए

नए अनुरोधों का पता लगाने के लिए समक्रमण

  • एलिस को बातचीत का अनुरोध मिलता है

  • एलिस एक नया उपकरण जोड़ने

  • दूसरे उपकरण को डिवाइस ए से अनुरोध प्राप्त करना चाहिए

स्वीकार किए गए अनुरोधों के लिए समक्रमण

  • एलिस के पास 2 डिवाइस हैं

  • एलिस ने बातचीत के अनुरोध को स्वीकार कर लिया

  • दूसरे उपकरण को स्वीकार किए गए अनुरोध का पता लगाना चाहिए

अस्वीकरण अनुरोधों के लिए समक्रमण

  • एलिस के पास 2 डिवाइस हैं

  • एलिस ने बातचीत के अनुरोध को अस्वीकार कर दिया

  • दूसरे उपकरण को अस्वीकृत अनुरोध का पता लगाना चाहिए

वर्तमान कार्यान्वयन

gerrit#15584 इस पृष्ठ को लागू करता है