समक्रमण प्रोटोकल
अब, यो सम्बद्ध भण्डार साझा गरेर उपकरणहरू बीच इतिहास सिंक गर्न सम्भव छ. उपकरणहरू सिंक यी परिवर्तनहरू पछ्याउन redefined गर्न आवश्यक छ.
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).
अब, यो सिंक गर्न प्रयोग गरिएको परिदृश्य होः
When the device (A) goes online, it announces its presence via a DeviceAnnouncement like the OldMethod.
अन्य उपकरणहरू (!A) ले त्यो घोषणा पत्ता लगाउनेछ र ConnectionManager मार्फत यस उपकरणलाई "sync://DEVICE_ID_A" नामको नयाँ च्यानल खोल्न अनुरोध गर्नेछ। (नोटः A ले अन्य उपकरणहरूबाट घोषणा प्राप्त गर्नेछ, त्यसैले यसले सिंक च्यानलहरू पनि अनुरोध गर्नेछ) ।
यो च्यानल खोलेपछि, यो च्यानल सोध्ने उपकरणले यसको ज्ञात कुराकानी र सम्पर्कहरू समावेश गर्ने DeviceSync मान (अर्को भाग हेर्नुहोस्) पठाउनेछ।
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":[] }
/* ... */
],
}
प्रयोगकर्ता कथाहरू
उपकरण थप्न गर्दा सिंक
एलिसले कुराकानी सिर्जना गर्छ
(वैकल्पिक) एलिस केही सन्देशहरू थप्नुहोस्
एलिसले अर्को उपकरण थप्छ
अर्को उपकरणले पहिले सिर्जना गरिएको कुराकानी प्राप्त गर्नुपर्दछ र सिंक गर्नुपर्दछ
उपकरण जडान गर्दा सिंक
एलिसले कुराकानी सिर्जना गर्छ
(वैकल्पिक) एलिस केही सन्देशहरू थप्नुहोस्
एलिसले अर्को यन्त्र जडान गर्यो
अर्को उपकरणले पहिले सिर्जना गरिएको कुराकानी प्राप्त गर्नुपर्दछ र सिंक गर्नुपर्दछ
धेरै यन्त्रहरू बीच सिङ्क
एलिसले दुईवटा उपकरण पाएकी छिन् ।
एलिसले कुराकानी सिर्जना गर्छ
अर्को उपकरणले एक उपकरणमा सिर्जना गरिएको कुराकानी प्राप्त गर्नुपर्दछ र सिंक गर्नुपर्दछ
नयाँ अनुरोधहरू पत्ता लगाउनको लागि सिंक
एलिसले वार्तालापको अनुरोध प्राप्त गरे
एलिस नयाँ उपकरण थप्नुहोस्
अन्य उपकरणले उपकरण A बाट अनुरोधहरू पुनः प्राप्ति गर्नुपर्दछ
स्वीकार गरिएका अनुरोधहरूको लागि सिंक
एलिससँग दुईवटा उपकरण छन् ।
एलिसले वार्तालापको अनुरोध स्वीकार्छिन्
अन्य उपकरणले स्वीकार गरिएका अनुरोधहरू पत्ता लगाउनु पर्छ
अस्वीकरण अनुरोधहरूको लागि सिंक
एलिससँग दुईवटा उपकरण छन् ।
एलिसले वार्तालापको अनुरोध अस्वीकार गरिन्
अन्य उपकरणले अस्वीकृत अनुरोध पत्ता लगाउनु पर्छ
वर्तमान कार्यान्वयन
gerrit#15584 यो पृष्ठ लागू गर्दछ