QT क्लाइंट पर स्थान साझा करना

इसका इस्तेमाल कैसे करें?

क्षुल्लक उपयोग

एक वार्तालाप में, उपयोगकर्ता एक नक्शा प्रदर्शित करने के लिए स्थान आइकन पर क्लिक कर सकता है। यदि Location Services डिवाइस पर सक्षम है, तो उपयोगकर्ता की स्थिति नक्शे पर दिखाई जाएगी, साथ ही सभी अन्य सदस्यों के स्थान जो अपना स्थान साझा कर रहे हैं (छोटे खाते की सभी वार्तालापों से) । उपयोगकर्ता स्थान साझा करने के बटन पर क्लिक करके स्थान साझा करना चालू और बंद कर सकता है। डिफ़ॉल्ट रूप से, उपयोगकर्ता का स्थान 15 मिनट के लिए साझा किया जाता है, लेकिन यह सेटिंग ऐप की सेटिंग्स में संशोधित की जा सकती है।

जब कोई उपयोगकर्ता वार्तालाप में अपना स्थान साझा कर रहा है, तो वार्तालाप आइकन पर एक लाल स्थान आइकन दिखाई देगा। यदि उपयोगकर्ता को किसी अन्य सदस्य से स्थान प्राप्त होता है, तो उन सभी वार्तालापों पर एक नारंगी स्थान आइकन प्रदर्शित किया जाएगा जिसमें सदस्य मौजूद है।

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

उन्नत उपयोग

बहु-साझा

परिदृश्य

उपयोगकर्ता पहले से ही वार्तालाप ए और वार्तालाप बी के साथ स्थान साझा कर रहा है।

विशेषता

यदि उपयोगकर्ता वार्तालाप C पर स्विच करता है, तो नक्शा अभी भी दिखाई देता है और उपयोगकर्ता के पास दो विकल्प हैं

  1. वार्तालाप C के सदस्यों के साथ स्थान साझा करने के लिए स्थान साझा करने के बटन पर क्लिक करें।

  2. स्थान साझा करने के अंत बटन पर क्लिक करें. यह एक पॉप-अप प्रदर्शित करेगा जो उपयोगकर्ता को या तो स्थान साझा करना पूरी तरह से बंद करने या केवल बातचीत सी के सदस्यों के साथ अपना स्थान साझा करना बंद करने की अनुमति देगा।

पिन खिड़की

यदि विंडो अनपिन है, तो उपयोगकर्ता स्थान साझा करने के बटन पर क्लिक नहीं कर पाएगा क्योंकि विंडो अब बातचीत से जुड़ी नहीं है। नए लोगों के साथ स्थान साझा करना शुरू करने के लिए, उपयोगकर्ता को विंडो को फिर से पिन करना होगा। ध्यान दें कि विंडो को अनपिन करना किसी भी चल रहे स्थान साझाकरण को प्रभावित नहीं करता है। इसके अलावा, विंडो अनपिन होने के दौरान स्थान साझा करने के अंत बटन पर क्लिक करने से सभी वर्तमान स्थान साझाकरण बंद हो जाएगा और कोई पॉप-अप दिखाई देगा जिससे उपयोगकर्ता को साझा करना बंद करने के लिए एक विशिष्ट वार्तालाप चुनने की अनुमति मिलेगी।

बहु खाता

प्रत्येक खाते का अपना अनूठा नक्शा होता है। यदि उपयोगकर्ता खाता A पर रहते हुए नक्शा को अनपिन करता है, तो खाता B पर स्विच करता है और नक्शा को अनपिन करता है, तो दो नक्शे दिखाई देंगे। खाता A और B के लिए नक्शे क्रमशः उन खातों के साथ साझा किए गए स्थानों को प्रदर्शित करते हैं, और एक दूसरे से पूरी तरह से अलग हैं

यह कैसे काम करता है?

परिचय

इस विशेषता को तीन भागों में विभाजित किया गया हैः

  1. अपनी स्थिति भेजने

  2. पद प्राप्त करना

  3. एक स्थिति प्रदर्शित करना

स्थान निर्धारित करने के लिए, [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html) एपीआई का उपयोग किया जाता है। एक बार स्थिति निर्धारित हो जाने के बाद, इसे DHT पर एक संदेश के रूप में भेजा जाता है और क्लाइंट को प्रेषित किया जाता है। प्राप्त स्थिति फिर [OpenLayers]https://openlayers.org/) जावास्क्रिप्ट लाइब्रेरी का उपयोग करके प्रदर्शित की जाती है।

स्थिति भेजने

जैसे ही एक नक्शा खोला जाता है, Positioning वर्ग QGeoPositionInfoSource वर्ग का उपयोग करके वर्तमान स्थिति को पुनर्प्राप्त करने का ध्यान रखता है। QtPositioning मॉड्यूल का QtPositioning वर्ग तब स्थिति को JSON प्रारूप में परिवर्तित किया जाता है और positionManager को प्रेषित किया जाता है। यह वर्ग पूरे स्थिति साझा करने की प्रक्रिया को समन्वयित करता है। स्थिति को फिर sendPosition() फ़ंक्शन के माध्यम से साझा किया जाता है। यह साझा किया जाता हैः

  • localPositionReceived संकेत के माध्यम से स्थानीय रूप से ताकि उपयोगकर्ता अपनी स्थिति देख सके

  • DHT पर positionShareConvIds_ सूची में सभी वार्तालापों पर। इस सूची में उन सभी वार्तालापों की कुंजी शामिल हैं जिनके साथ उपयोगकर्ता अपनी स्थिति साझा करना चाहता है। इस कुंजी से सभी प्रतिभागियों के यूआरआई प्राप्त किए जाते हैं और प्रत्येक प्रतिभागी को स्थिति संदेश भेजा जाता है।

किसी स्थिति का JSON प्रारूप निम्नानुसार हैः

  • प्रकार (स्थिति या रोक संदेश)

  • अक्षांश

  • देशांतर

  • समय (QtClient द्वारा उपयोग नहीं किया गया)

डेटा का एक उदाहरण: {\"लाट\":45.51616583988481,\"लंबा\":-73.620693,\"समय\":1671658862000,\"प्रकार\":\"स्थिति\"}

डेमोन को स्थिति भेजते समय, लेखक की यूआरआई भी प्रेषित की जाती है।

जब उपयोगकर्ता वार्तालाप के साथ अपनी स्थिति साझा करना बंद कर देता है, तो वार्तालाप की आईडी को positionShareConvIds_ सूची से हटा दिया जाता है। प्रत्येक प्रतिभागी को एक "स्टॉप" संदेश भी भेजा जाता है।

पद प्राप्त करना

जब एक स्थिति प्राप्त होती है, तो यह 'onPositionReceived()'स्लॉट को ट्रिगर करता है। चाहे वह QtPositioning मॉड्यूल से स्थानीय स्थिति हो या किसी अन्य संपर्क से स्थिति। positionManager स्तर पर, objectListSharingUris_ सूची ग्राहक की सभी स्थितियों को संग्रहीत करती है। स्थिति या तो हैः

  • जोड़ा गया (यूआरआई सूची में मौजूद नहीं है)

  • अद्यतन (यूआरआई सूची में पहले से मौजूद है)

  • हटाया गया (प्रकार = "स्टॉप")

स्थिति को सूची में positionObject प्रकार के वस्तु के रूप में संग्रहीत किया जाता है। यह प्रकार प्रत्येक स्थिति के लिए एक वॉचडॉग की अनुमति देता है। यदि स्थिति को एक निश्चित समय सीमा के भीतर अद्यतन नहीं किया जाता है, तो इसे सूची से हटा दिया जाता है।

एक स्थिति प्रदर्शित करना

जब एक स्थिति प्राप्त होती है (slot onPositionReceived() ट्रिगर की जाती है), तो स्थिति Qml को प्रेषित होती है जो बदले में जानकारी को [OpenLayers]https://openlayers.org/) जावास्क्रिप्ट लाइब्रेरी में भेजती है। Qt WebEngine मॉड्यूल लाइब्रेरी की वेब तकनीक और Qml के बीच पुल बनाने की अनुमति देता है। प्रत्येक स्थिति को मानचित्र में एक परत द्वारा जोड़ा जाता है। newPosition() फ़ंक्शन एक नई परत जोड़ता है, updatePosition() फ़ंक्शन परत के निर्देशांक को अपडेट करता है, और `removePosition() फ़ंक्शन परत को हटा देता है।