2011-07-11 10 views
6

में प्रविष्टि बनाएं मुझे पता है कि इस सवाल से पहले पूछा गया है, लेकिन केवल mschonaker here द्वारा आंशिक प्रतिक्रिया दी गई है। मेरी वेबसाइट पर, उपयोगकर्ता अपने रोस्टर में लोगों को जोड़ सकता है, तो दोस्त को स्वीकार करना होगा और आखिरकार वे जुड़े हुए हैं। पहले व्यक्ति (उपयोगकर्ता एक) प्रसिद्धस्मैक- रोस्टर

roster.createEntry(jid, name, groups);

जो काम करता है का उपयोग करें और अपने रोस्टर में एक प्रविष्टि जोड़ने के लिए, लेकिन तब मैं थोड़ा क्या करना है उलझन में हूँ:

  • कैसे करना है मुझे दूसरे छोर पर अनुरोध प्राप्त होता है? मैंने पैकेट लिस्टनर को कार्यान्वित करने की कोशिश की, प्रक्रिया पैकेट() को ओवरराइड करें और पैकेट की जांच करें जो कि प्रकार हैं। टाइप करें। सदस्यता लें या उपस्थिति। टाइप करें। सदस्यता लें, लेकिन ऐसा लगता है कि यह केवल उपयोगकर्ता के लिए ट्रिगर किया गया है, लेकिन वह नहीं जिसे सुनना चाहिए सदस्यता- उपयोगकर्ता बी।

  • फिर, मेरे पास एक और फ़ंक्शन है जो लॉगिन पर सभी अनुरोधों को देख सकता है, इसलिए यदि मैं फिर से लॉगिन करता हूं तो मुझे अनुरोध दिखाई देगा, लेकिन मैं इसे कैसे स्वीकार करूं? पहली बार में, मैंने सोचा कि उपयोगकर्ता ख भी द्वारा roster.createEntry(jid, name, groups);

अपने रोस्टर में उपयोगकर्ता एक जोड़ना चाहिए, लेकिन वह काम नहीं किया और कुछ भी नहीं हो रहा था। मैंने

Presence subscribed = new Presence(Presence.Type.subscribed); 
subscribed.setTo(jid); 
xMPPConnection.sendPacket(subscribed); 

करने की कोशिश की लेकिन यह भी काम नहीं किया। मुझे यकीन है कि ऐसा करने के लिए एक अच्छा और सरल तरीका होना चाहिए, लेकिन मुझे अब तक कहीं भी नहीं मिला है, और एक समय में एक चीज की कोशिश करने से मुझे बहुत सारे सिरदर्द दिए गए। क्या किसी के लिए सही प्रवाह पता है? अग्रिम में धन्यवाद!

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है, कृपया आप उसी –

उत्तर

4

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

Automatically accept all presence subscription requests. 
Automatically reject all presence subscription requests. 
Process presence subscription requests manually. 

मोड Roster.setSubscriptionMode (Roster.SubscriptionMode) विधि का उपयोग कर सेट किया जा सकता। सरल क्लाइंट आमतौर पर स्वचालित सदस्यता मोड में से एक का उपयोग करते हैं, जबकि पूर्ण-विशेषीकृत क्लाइंट को सदस्यता अनुरोधों को मैन्युअल रूप से संसाधित करना चाहिए और अंतिम उपयोगकर्ता को प्रत्येक अनुरोध को स्वीकार या अस्वीकार कर देना चाहिए। मैन्युअल मोड का उपयोग करते समय, एक पैकेट लिस्टनर पंजीकृत होना चाहिए जो उपस्थिति पैकेट के लिए सुनता है जिसमें एक प्रकार का Presence.Type.subscribe है।

तो, मैन्युअल पर रोस्टर के सदस्यता मोड को सेट करने का प्रयास करें, और फिर Presence.Type.subscribe सुनने के लिए पैकेट लिस्टनर को लागू करें। एक बार पैकेट प्राप्त हो जाने के बाद, उपस्थिति के साथ एक नया पैकेट बनाएं। टाइप करें। सदस्यता लें और इसे प्रेषक को भेजें।

+0

के बारे में मदद कर सकते हैं, हमने मैन्युअल रूप से मोड को सेट नहीं किया है, शायद यही कारण है कि, मुझे बेवकूफ़ बनाओ। मैंने सोचा कि ऐसा करने से वास्तव में कोई फर्क नहीं पड़ता क्योंकि यह स्वचालित रूप से अनुरोधों को स्वीकार नहीं कर रहा था। अब इसे – Guillaume

+0

आज़माएं, इसलिए मैं इसे काम करने में कामयाब रहा, लेकिन यह थोड़ा गन्दा है, मुझे आश्चर्य है कि कोई आसान तरीका है: उपयोगकर्ता उपयोगकर्ता को बी को रोस्टर करने के लिए जोड़ता है, उपयोगकर्ता बी अनुरोध प्राप्त करता है और स्वीकार करता है (यह उपयोगकर्ता को नहीं जोड़ता है रोस्टर बी), तो उपयोगकर्ता बी उपयोगकर्ता को अपने रोस्टर में जोड़ता है, और उपयोगकर्ता को स्वीकार करने की आवश्यकता होती है (क्यों? क्योंकि उसने पहले स्थान पर बी जोड़ा), तो यह काम करता है ... – Guillaume

+0

हां, इस तरह यह किया जाना चाहिए। आरएफसी पर एक नज़र डालें: http://xmpp.org/rfcs/rfc3921.html#int, सेक्शन 8.2।, विशेष रूप से अंतिम पैराग्राफ: 'सब्स्क्राइब किए गए प्रकार की उपस्थिति स्टांज़ा प्राप्त करने पर, उपयोगकर्ता को रसीद को स्वीकार करना चाहिए उस सब्सक्रिप्शन स्टेट अधिसूचना के माध्यम से संपर्क में "सब्सक्राइब करें" के प्रकार की उपस्थिति स्टैंजा भेजकर या "अस्वीकार" के माध्यम से संपर्क में "सदस्यता समाप्त करें" टाइप करके इसे "अस्वीकार कर" के माध्यम से "पुष्टि" करें। – Maggie

संबंधित मुद्दे