नीचे कैसे मैं अपने ही समस्या हल हो गई है। ध्यान दें कि इस समाधान में XMPPRoom बिल्कुल शामिल नहीं है। सबसे पहले, मैंने एक विधि बनाई है, स्थिति के आधार पर, या तो एक कमरा बनाता है या प्रवेश करता है। (प्रति एक्सएमपीपी दस्तावेज, बनाने के लिए एक्सएमएल अनुरोध वही है जैसा कि आप एक कमरे में प्रवेश करने के लिए भेजते हैं; यानी, यदि कमरा प्रवेश करने के बाद भी मौजूद नहीं है, तो सेवा आपके लिए इसे तैयार करेगी ।)
यहां हम जाते हैं। यह वह तरीका है जो कमरे में बनाता है/प्रवेश करता है। यह विधि क्या करती है वह उस कमरे में उपस्थिति भेजती है जिसे आप बनाना/दर्ज करना चाहते हैं। यदि आप कमरे में प्रवेश करने वाले पहले व्यक्ति हैं और कमरा अभी तक नहीं बनाया गया है, तो आप स्वचालित रूप से इसके मालिक और मॉडरेटर बन जाते हैं।
- (void)createOrEnterRoom:(NSString *)roomName
{
//here we enter a room, or if the room does not yet exist, this method creates it
//per XMPP documentation: "If the room does not yet exist, the service SHOULD create the room"
//this method accepts an argument which is what you would baptize the room you wish created
NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];
NSString *room = [roomName stringByAppendingString:@"@conference.jabber.com/iMac"];
[presence addAttributeWithName:@"to" stringValue:room];
NSXMLElement *x = [NSXMLElement elementWithName:@"x" xmlns:@"http://jabber.org/protocol/muc"];
NSXMLElement *history = [NSXMLElement elementWithName:@"history"];
[history addAttributeWithName:@"maxstanzas" stringValue:@"50"];
[x addChild:history];
[presence addChild:x];
[[self xmppStream] sendElement:presence];
}
इसके बाद, AppDelegate में जहां XMPPStream तरीकों हम XML प्रतिक्रिया हम सर्वर द्वारा भेजे गए स्थिति कोड की जाँच करके didReceivePresence विधि में प्राप्त फ़िल्टर कर घोषित कर रहे हैं। यदि स्थिति कोड 201 है, बिंगो! कमरे का निर्माण बस ठीक हो गया। 201 के अलावा स्टेटस कोड अलग-अलग चीजें हैं, लेकिन चलिए अपने उद्देश्य के लिए 201 पर ध्यान केंद्रित करते हैं।
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
{
NSXMLElement *x = [presence elementForName:@"x" xmlns:@"http://jabber.org/protocol/muc#user"];
for (NSXMLElement *status in [x elementsForName:@"status"])
{
switch ([status attributeIntValueForName:@"code"])
{
case 201: [self notifyRoomCreationOk:room];
}
}
}
फिर, हम सर्वर है कि हम क्या प्रकार "तत्काल" जिसका अर्थ है कि हम इसे कमरे चूक बता एक बुद्धि तत्व भेज देंगे के एक कमरे का निर्माण कर रहे बताओ। अधिसूचना RoomCreationOk एक अलग दृश्य में बुलाया गया एक प्रतिनिधि तरीका है जब कमरे का निर्माण सफल होता है, इसके बाद मुझे इसे लगातार फ़ाइल बनाने के लिए एक टेक्स्ट फ़ाइल में कमरा रिकॉर्ड करना होता है ताकि अगली बार जब मैं ऐप खोलूं तो पहले जो कमरा मैंने बनाया था, वह दिखाई देगा। मेरी अधिसूचना RoomCreationOk विधि में, मैंने भेजा है DefaultRoomConfig जो मूल रूप से वर्णन करता है कि इस पैराग्राफ की पहली वाक्य में क्या कहा गया है।
-(void)sendDefaultRoomConfig:(NSString *)room
{
NSXMLElement *x = [NSXMLElement elementWithName:@"x" xmlns:@"jabber:x:data"];
[x addAttributeWithName:@"type" stringValue:@"submit"];
NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"http://jabber.org/protocol/muc#owner"];
[query addChild:x];
XMPPIQ *iq = [XMPPIQ iq];
[iq addAttributeWithName:@"id" stringValue:[NSString stringWithFormat:@"inroom-cr%@", room]];
[iq addAttributeWithName:@"to" stringValue:room];
[iq addAttributeWithName:@"type" stringValue:@"set"];
[iq addChild:query];
[[self xmppStream ] sendElement:iq];
}
सुनिश्चित करें कि आप XMPPStream बार देखा गया है कि उपरोक्त विधियों फोन पर सक्षम किया हुआ है, अन्यथा, ये काम नहीं करेगा बनाओ। यही सब है इसके लिए। मजा करो XMPP-ing!
क्या आप क्यूएन को अन्य साइटों से जोड़ने के लिए लिंक कर सकते हैं ?? –
@LithuThiruvathira आप यहां से ढांचा प्राप्त कर सकते हैं: https://github.com/robbiehanson/XMPPFramework –
इसी तरह के प्रश्न http: // stackoverflow के उत्तर पर एक नज़र डालें।कॉम/प्रश्न/11791022/परेशानी बनाने-xmpp-muc-room-code-503-service-अनुपलब्ध/14708653 # 14708653 –