QT క్లయింట్లో స్థానం భాగస్వామ్యం

దాన్ని ఎలా ఉపయోగించాలి?

చిన్న ఉపయోగం

ఒక సంభాషణలో, వినియోగదారు ఒక మ్యాప్ను ప్రదర్శించడానికి స్థాన చిహ్నాన్ని క్లిక్ చేయవచ్చు. Location Services పరికరంలో ప్రారంభించబడితే, వినియోగదారు యొక్క స్థానం మ్యాప్లో ప్రదర్శించబడుతుంది, వారి స్థానాన్ని పంచుకునే ఇతర సభ్యుల స్థానం (ఎన్నుకున్న ఖాతా యొక్క అన్ని సంభాషణల నుండి). వినియోగదారు స్థానం భాగస్వామ్యాన్ని ఆన్ మరియు ఆఫ్ చేయడం ద్వారా స్థానం భాగస్వామ్యం బటన్లను క్లిక్ చేయవచ్చు. డిఫాల్ట్గా, వినియోగదారు యొక్క స్థానం 15 నిమిషాలు భాగస్వామ్యం చేయబడుతుంది, కానీ ఈ సెట్టింగ్ అనువర్తనం యొక్క సెట్టింగులలో సవరించబడుతుంది.

ఒక వినియోగదారు సంభాషణలో తన స్థానాన్ని పంచుకున్నప్పుడు, సంభాషణ చిహ్నంలో ఎరుపు స్థాన చిహ్నం కనిపిస్తుంది. వినియోగదారు మరొక సభ్యుడి నుండి స్థానాన్ని స్వీకరిస్తే, సభ్యుడు ఉన్న అన్ని సంభాషణలలో నారింజ స్థాన చిహ్నం ప్రదర్శించబడుతుంది.

వినియోగదారుడు మ్యాప్తో పరస్పర చర్య చేయవచ్చు, ఇది ఇటీవలిగా, జూమ్ చేసి, దాన్ని తరలించడం ద్వారా మరియు మూసివేయడం ద్వారా. మ్యాప్ను కూడా పిన్ చేయవచ్చు లేదా పిన్ చేయలేరు. మ్యాప్ను పిన్ చేయనప్పుడు, వినియోగదారు సరైన ఖాతాలో ఉంటే దాన్ని తిరిగి పిన్ చేయవచ్చు. ఈ లక్షణం వినియోగదారుని మ్యాప్ను చూడగలిగేలా అనుమతిస్తుంది.

ఆధునిక ఉపయోగం

బహుళ భాగస్వామ్యం

దృశ్యాలు

వాడుకరి ఇప్పటికే సంభాషణ A మరియు సంభాషణ B తో స్థానాన్ని పంచుకుంటున్నారు.

ఫీచర్

వినియోగదారు సంభాషణ C కు మారినట్లయితే, మ్యాప్ ఇప్పటికీ కనిపిస్తుంది మరియు వినియోగదారుకు రెండు ఎంపికలు ఉన్నాయి

  1. సంభాషణ C సభ్యులతో కూడా స్థానాన్ని పంచుకోవడానికి స్థల భాగస్వామ్య బటన్ పై క్లిక్ చేయండి.

  2. స్థానం భాగస్వామ్యం ముగింపు బటన్ పై క్లిక్ చేయండి. ఇది వినియోగదారుని స్థానం భాగస్వామ్యాన్ని పూర్తిగా నిలిపివేయడానికి లేదా సంభాషణ C సభ్యులతో వారి స్థానాన్ని పంచుకోవడం మాత్రమే ఆపడానికి అనుమతించే పాప్-అప్ను తెస్తుంది.

పిన్ చేసిన విండో

విండోను అన్పిన్ చేస్తే, వినియోగదారు స్థానం భాగస్వామ్యం బటన్పై క్లిక్ చేయలేరు ఎందుకంటే విండో ఇకపై సంభాషణకు కనెక్ట్ కాలేదు. క్రొత్త వ్యక్తులతో స్థానం భాగస్వామ్యం ప్రారంభించడానికి, వినియోగదారు విండోను తిరిగి పిన్ చేయాలి. విండోను అన్పిన్ చేయడం కొనసాగుతున్న స్థాన భాగస్వామ్యాన్ని ప్రభావితం చేయదని గమనించండి. అదనంగా, విండో అన్పిన్ చేయబడినప్పుడు స్థానం భాగస్వామ్యం ముగింపు బటన్ను క్లిక్ చేయడం ప్రస్తుత స్థాన భాగస్వామ్యాన్ని నిలిపివేస్తుంది మరియు భాగస్వామ్యాన్ని ఆపడానికి వినియోగదారు నిర్దిష్ట సంభాషణను ఎంచుకోవడానికి అనుమతించే పాప్-అప్ కనిపించదు.

బహుళ ఖాతాలు

ప్రతి ఖాతాకు దాని స్వంత ప్రత్యేకమైన మ్యాప్ ఉంటుంది. ఖాతా A లో ఉన్నప్పుడు వినియోగదారు మ్యాప్ను అన్పిన్ చేస్తే, అప్పుడు ఖాతా B కి మారడం మరియు మ్యాప్ను అన్పిన్ చేస్తే, రెండు మ్యాప్లు కనిపిస్తాయి. ఖాతా A మరియు B కోసం మ్యాప్లు ఆ ఖాతాలతో పంచుకున్న స్థానాలను చూపుతాయి మరియు అవి పూర్తిగా వేరుగా ఉంటాయి

ఇది ఎలా పనిచేస్తుంది?

పరిచయం

ఈ లక్షణం మూడు భాగాలుగా విభజించబడిందిః

  1. ఒక వ్యక్తి యొక్క స్థానం పంపడం

  2. ఒక స్థానం పొందడం

  3. స్థానం ప్రదర్శించడం

స్థానం నిర్ణయించడానికి, [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API ఉపయోగించబడుతుంది. స్థానం నిర్ణయించిన తర్వాత, ఇది DHT లో సందేశంగా పంపబడుతుంది మరియు క్లయింట్కు ప్రసారం చేయబడుతుంది. అందుకున్న స్థానం తరువాత [OpenLayers] (https://openlayers.org/) జావాస్క్రిప్ట్ లైబ్రరీని ఉపయోగించి ప్రదర్శించబడుతుంది.

స్థానం పంపడం

మ్యాప్ తెరిచిన వెంటనే, Positioning తరగతి QQGeoPositionInfoSource తరగతి ఉపయోగించి ప్రస్తుత స్థానాన్ని తిరిగి పొందే బాధ్యత వహిస్తుంది. QtPositioning మాడ్యూల్ యొక్క QtPositioning తరగతి. ఆ తర్వాత స్థానాన్ని JSON ఫార్మాట్కు మార్చి positionManager కు ప్రసారం చేస్తారు. ఈ తరగతి మొత్తం స్థానాన్ని పంచుకునే ప్రక్రియను సమన్వయం చేస్తుంది. ఆ తర్వాత స్థానాన్ని sendPosition() ఫంక్షన్ ద్వారా పంచుకుంటారు. ఇది భాగస్వామ్యం చేయబడుతుందిః

  • localPositionReceived సిగ్నల్ ద్వారా వినియోగదారుడు తన సొంత స్థానాన్ని చూడవచ్చు

  • positionShareConvIds_ జాబితాలోని అన్ని సంభాషణలకు DHT లో. ఈ జాబితా వినియోగదారు తన స్థానాన్ని పంచుకోవాలనుకునే అన్ని సంభాషణల కీలను కలిగి ఉంటుంది. ఈ కీ నుండి, అన్ని పాల్గొనేవారి URI లను పొందవచ్చు మరియు ప్రతి పాల్గొనేవారికి స్థాన సందేశం పంపబడుతుంది.

ఒక స్థానం యొక్క JSON ఫార్మాట్ క్రింది విధంగా ఉంటుందిః

  • రకం (స్థానం లేదా స్టాప్ సందేశం)

  • అక్షాంశం

  • పొడవు

  • సమయం (QtClient ఉపయోగించనిది)

డేటా ఉదాహరణః {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"Position\"}

డీమోన్కు స్థానం పంపినప్పుడు, రచయిత యొక్క URI కూడా ప్రసారం చేయబడుతుంది.

సంభాషణలో తమ స్థానాన్ని పంచుకోవడం ఆపినప్పుడు, సంభాషణ యొక్క ID positionShareConvIds_ జాబితా నుండి తొలగించబడుతుంది. ప్రతి పాల్గొనేవారికి "స్టాప్" సందేశం కూడా పంపబడుతుంది.

ఒక స్థానం పొందడం

ఒక స్థానం స్వీకరించినప్పుడు, ఇది 'onPositionReceived()'స్లాట్ను ప్రారంభిస్తుంది. ఇది QtPositioning మాడ్యూల్ నుండి స్థానిక స్థానం అయినా లేదా మరొక పరిచయం నుండి స్థానం అయినా. positionManager స్థాయిలో, objectListSharingUris_ జాబితా క్లయింట్ యొక్క అన్ని స్థానాలను నిల్వ చేస్తుంది. స్థానంః

  • జోడించబడింది (URI జాబితాలో లేదు)

  • నవీకరించబడింది (URI ఇప్పటికే జాబితాలో ఉంది)

  • తొలగించబడింది (టైప్ = "స్టాప్")

ఈ రకం positionObject అనే వస్తువు రూపంలో ఈ జాబితాలో నిల్వ చేయబడుతుంది. ఈ రకం ప్రతి స్థానం కోసం ఒక వాచ్ డాగ్ను అనుమతిస్తుంది. ఒక నిర్దిష్ట కాల వ్యవధిలో ఈ స్థానం నవీకరించబడకపోతే, అది జాబితా నుండి తొలగించబడుతుంది.

స్థానం ప్రదర్శించడం

ఒక స్థానం స్వీకరించినప్పుడు (slot onPositionReceived() ప్రారంభించబడుతుంది), స్థానం Qml కి ప్రసారం చేయబడుతుంది, ఇది క్రమంగా [OpenLayers]https://openlayers.org/) జావాస్క్రిప్ట్ లైబ్రరీకి సమాచారాన్ని పంపుతుంది. Qt WebEngine మాడ్యూల్ లైబ్రరీ యొక్క వెబ్ టెక్నాలజీ మరియు Qml మధ్య వంతెనను అనుమతిస్తుంది. ప్రతి స్థానం మ్యాప్కు జోడించిన పొర ద్వారా ప్రాతినిధ్యం వహిస్తుంది. newPosition() ఫంక్షన్ కొత్త పొరను జోడిస్తుంది, updatePosition() ఫంక్షన్ పొర యొక్క కోఆర్డినేట్లను అప్డేట్ చేస్తుంది, మరియు `removePosition() ఫంక్షన్ పొరను తొలగిస్తుంది.