QT क्लाइन्टमा स्थान साझेदारी

यसलाई कसरी प्रयोग गर्ने?

सानो प्रयोग

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

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

प्रयोगकर्ताले नक्सासँग हालसालैको, झूलिरहेको, सार्ने र बन्द गरेर अन्तरक्रिया गर्न सक्दछ। नक्सा पनि पिन वा अनपिन गर्न सकिन्छ। जब नक्सा अनपिन हुन्छ, यो पुनः पिन गर्न सकिन्छ यदि प्रयोगकर्ता सही खातामा छ भने। यो सुविधाले प्रयोगकर्तालाई नक्सालाई देख्न अनुमति दिन्छ जबसम्म उसले जामी प्रयोग गर्न जारी राख्छ।

उन्नत प्रयोग

बहु-साझापन

परिदृश्य

प्रयोगकर्ताले वार्तालाप A र वार्तालाप B सँग स्थान साझा गरिसकेको छ ।

विशेषता

यदि प्रयोगकर्ताले कुराकानी C मा स्विच गर्दछ भने नक्सा अझै पनि दृश्यमान छ र प्रयोगकर्तासँग दुई विकल्पहरू छन्

  1. वार्तालाप C को सदस्यहरूसँग पनि स्थान साझा गर्न स्थान साझेदारी बटनमा क्लिक गर्नुहोस्।

  2. स्थान साझेदारी अन्त बटन क्लिक गर्नुहोस्। यसले एक पप-अप देखाउँदछ जसले प्रयोगकर्तालाई स्थान साझेदारी पूर्ण रूपमा बन्द गर्न अनुमति दिन्छ वा केवल कुराकानी C को सदस्यहरूसँग आफ्नो स्थान साझेदारी गर्न रोक्दछ।

पिन गरिएको विन्डो

यदि विन्डो अनपिन गरिएको छ भने, प्रयोगकर्ताले स्थान साझेदारी बटनमा क्लिक गर्न सक्षम हुनेछैन किनकि विन्डो अब कुराकानीमा जडान गरिएको छैन। नयाँ व्यक्तिहरूसँग स्थान साझेदारी गर्न सुरू गर्न, प्रयोगकर्ताले विन्डो पुनः पिन गर्नुपर्नेछ। नोट गर्नुहोस् कि विन्डो अनपिन गर्दा कुनै पनि चलिरहेको स्थान साझेदारीमा असर पर्दैन। थप रूपमा, विन्डो अनपिन हुँदा स्थान साझेदारी अन्त्य बटनमा क्लिक गर्दा सबै हालको स्थान साझेदारी रोकिनेछ र कुनै पप-अप देखा पर्नेछ जसले प्रयोगकर्तालाई साझेदारी रोक्नको लागि विशिष्ट कुराकानी चयन गर्न अनुमति दिनेछ।

बहु खाताहरू

प्रत्येक खाताको आफ्नै अद्वितीय नक्सा हुन्छ। यदि प्रयोगकर्ताले खाता A मा रहेको नक्सा हटाउँछ भने, त्यसपछि खाता B मा स्विच गर्दछ र नक्सा हटाउँछ, दुई नक्साहरू देखिन सक्दछन्। खाता A र B को लागि नक्साले ती खाताहरूसँग साझा स्थितिहरू प्रदर्शन गर्दछ, क्रमशः, र तिनीहरू एक अर्काबाट पूर्ण रूपमा अलग छन्

यो कसरी काम गर्छ?

परिचय

यो विशेषता तीन भागमा विभाजित छः

  1. आफ्नो स्थान पठाउँदै

  2. पद प्राप्त गर्दै

  3. स्थान प्रदर्शन

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

स्थिति पठाउँदै

नक्सा खोलेपछि, Positioning वर्गले QGeoPositionInfoSource वर्गको प्रयोग गरेर हालको स्थिति पुनः प्राप्ति गर्ने ख्याल राख्छ। त्यसपछि स्थिति JSON ढाँचामा रूपान्तरण गरिन्छ र positionManager मा प्रसारित हुन्छ। यो वर्गले सम्पूर्ण स्थिति साझेदारी प्रक्रिया समन्वय गर्दछ। स्थिति त्यसपछि sendPosition() प्रकार्य मार्फत साझा गरिन्छ। यो साझा गरिएको छः

  • localPositionReceived संकेत मार्फत स्थानीय रूपमा ताकि प्रयोगकर्ताले आफ्नो स्थान देख्न सक्दछ

  • DHT मा positionShareConvIds_ सूचीमा सबै कुराकानीहरूमा। यो सूचीमा प्रयोगकर्ताले आफ्नो स्थिति साझा गर्न चाहने सबै कुराकानीहरूको कुञ्जीहरू समावेश छन्। यस कुञ्जीबाट सबै सहभागीहरूको यूआरआईहरू प्राप्त गरिन्छ र प्रत्येक सहभागीलाई स्थिति सन्देश पठाइन्छ।

स्थितिको JSON ढाँचा निम्नानुसार छः

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

  • अक्षांश

  • लम्बाई

  • समय (QtClient द्वारा प्रयोग गरिएको छैन)

डाटाको उदाहरणः {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"position\"}

जब स्थिति डेमोनलाई पठाइन्छ, लेखकको यूआरआई पनि प्रसारित हुन्छ।

जब प्रयोगकर्ताले कुराकानीको साथ आफ्नो स्थिति साझा गर्न रोक्दछ, कुराकानीको आईडी positionShareConvIds_ सूचीबाट हटाइन्छ। प्रत्येक सहभागीलाई "स्टप" सन्देश पनि पठाइन्छ।

पद प्राप्त गर्दै

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

  • थपियो (URI सूचीमा छैन)

  • अपडेट (URI सूचीमा पहिले नै उपस्थित छ)

  • हटाइयो (प्रकार = "स्टप")

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

स्थान प्रदर्शन

जब स्थिति प्राप्त हुन्छ (स्लॉट onPositionReceived() ट्रिगर गरिएको), स्थिति Qml मा प्रसारित हुन्छ जुन यसको बारी मा [OpenLayers] (https://openlayers.org/) जाभास्क्रिप्ट लाइब्रेरीमा जानकारी पठाउँदछ। Qt WebEngine मोड्युलले पुस्तकालयको वेब टेक्नोलोजी र Qml बीचको पुलको लागि अनुमति दिन्छ। प्रत्येक स्थिति नक्सामा थपेको तह द्वारा प्रतिनिधित्व गरिन्छ। newPosition() प्रकार्यले नयाँ तह थप्दछ, updatePosition() प्रकार्य ले तहको निर्देशांक अपडेट गर्दछ, र removePosition() प्रकार्य ले तह हटाउँछ।