2013-02-02 11 views
9

मैं XMPPFramework का उपयोग करके एक एमयूसी बनाने में सक्षम हूं और नीचे दिए गए कोड का उपयोग करके उस कमरे में शामिल होने के लिए उपयोगकर्ता निमंत्रण अनुरोध भेज सकता हूं।चैटरूम आमंत्रण को स्वीकार करना

// Creating 
AppDelegate *dele =(AppDelegate *) [[UIApplication sharedApplication]delegate]; 

xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:dele jid:[XMPPJID jidWithString:self.roomName] dispatchQueue:dispatch_get_main_queue()]; 
[xmppRoom addDelegate:dele delegateQueue:dispatch_get_main_queue()]; 
[xmppRoom activate:dele.xmppStream]; 
[xmppRoom joinRoomUsingNickname:self.myNick history:nil]; 

// Inviting 
[xmppRoom inviteUser:[XMPPJID jidWithString:@"[email protected]"] withMessage:@"Come Join me"]; 

उपयोगकर्ता "एबीसी" कैसे जानता है कि उसे निमंत्रण मिला है और वह इसे स्वीकार या अस्वीकार कर कैसे प्रतिक्रिया दे सकता है?

मुझे XMPPFramework में कोई भी वर्ग नहीं मिला जो सीधे चैट रूम आमंत्रण से निपटता है। मेरे शोध का कहना है कि जब भी कोई उपयोगकर्ता एक चैटरूम आमंत्रण प्राप्त करता है, xmmppStream के प्रतिनिधि विधि कहा जाता है:

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message 

कि संदेश में, मैं जाँच यह नाम के साथ NSXMLElement शामिल है कि क्या "आमंत्रित करें", और अगर यह तो होता है मैं भेज उपयोगकर्ता को एक कॉलबैक। फिर मैं उसी नाम के साथ चैट रूम बनाउंगा जो चैट रूम के नाम से है जिसके द्वारा उपयोगकर्ता को निमंत्रण प्राप्त हुआ और उस नए बनाए गए कमरे में प्रवेश करें। यह ठीक काम करता है लेकिन शांत लंबा और शांत नहीं है। मैं जानना चाहता हूं कि XMPPFramework में कोई वर्ग here उपलब्ध है जो चैट रूम आमंत्रण को अलग से संभाल सकता है। उदाहरण के लिए, कमरे के निमंत्रण का पता लगाना, स्वीकार करना और घटाना।

रूम का नाम निकालने के लिए मेरे कोड:

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message 
{ 
    NSXMLElement * x = [message elementForName:@"x" xmlns:XMPPMUCUserNamespace]; 
    NSXMLElement * invite = [x elementForName:@"invite"]; 
    NSXMLElement * decline = [x elementForName:@"decline"]; 
    NSXMLElement * directInvite = [message elementForName:@"x" xmlns:@"jabber:x:conference"]; 
    NSString *msg = [[message elementForName:@"body"]stringValue]; 
    NSString *from = [[[message attributeForName:@"from"]stringValue]; 
    if (invite || directInvite) 
    { 
     [self createAndEnterRoom:from Message:msg]; 
     return; 
    } 
    [self.delegate newMessageRecieved:msg]; 
} 
+0

हाय विशाल अंदर, मैं वही समस्या में फंस कर रहा हूँ, तुम मुझे जानते है कि आप किसी भी समाधान या दृष्टिकोण पाया तो कृपया कर सकते हैं इसके साथ ? धन्यवाद – Mangesh

उत्तर

12

कक्ष निमंत्रण के लिए और गिरावट आती है, को लागू XMPPMUCDelegate और उसके तरीकों -xmppMUC:didReceiveRoomInvitation: और -xmppMUC:didReceiveRoomInvitationDecline:

कमरा जेआईडी प्राप्त करने के लिए, [message from] का आह्वान करें;

कमरे में शामिल होने के लिए, XMPPRoom को तुरंत चालू करें और -joinRoomUsingNickname:history: पर जाएं।

फिर अपने कमरे प्रतिनिधि प्रतिनिधि वर्ग को XMPPRoomDelegate लागू करें, और कमरे में संदेश प्राप्त करने के लिए delegate methods को लागू करें।

ऐसा लगता है कि वर्तमान में निमंत्रण का जवाब देने के लिए एक और स्वचालित तरीका नहीं है।

अद्यतन: प्रतिनिधि कॉलबैक अब पैरामीटर के रूप में कमरे जेआईडी प्राप्त करते हैं, अर्थशास्त्र को थोड़ा सा स्पष्ट करते हैं।

- (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitation:(XMPPMessage *)message; 
- (void)xmppMUC:(XMPPMUC *)sender roomJID:(XMPPJID *) roomJID didReceiveInvitationDecline:(XMPPMessage *)message; 
+0

लेकिन मैं केवल एक xmpproom बनाने के बाद xmpproomDelegate लागू कर सकते हैं। xmpproom प्रतिनिधि विधियों कमरे के निमंत्रण के लिए कोई कॉल वापस नहीं प्रदान करते हैं, मुझे लगता है कि वे केवल इनकमिंग और आउटगोइंग संदेश और किसी विशेष कमरे के कुछ अन्य सामानों को संभालने के लिए हैं। –

+0

इसके लिए आप 'XMPPMUCDelegate' चाहते हैं। – paulmelnikow

+0

हाँ, लेकिन मैं निमंत्रण कैसे स्वीकार करूं ?? मैं उस कमरे में कैसे प्रवेश करूं और उस कमरे के सभी आने वाले संदेशों को कैसे संभालूं? क्या मुझे एक ही नाम के साथ एक कमरा बनाना है और फिर अपने प्रतिनिधि तरीकों को लागू करना है जैसा कि मैंने अपने प्रश्न में उल्लेख किया है ?? –

-1

सिर्फ कोड

if ([presenceType isEqualToString:@"subscribe"]) { 

    [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"localhost"]]; 
    NSLog(@"presence user wants to subscribe %@",presenceFromUser); 

    [xmppRoster acceptPresenceSubscriptionRequestFrom:[presence from] andAddToRoster:YES]; 

//For reject button 
//  [xmppRoster rejectPresenceSubscriptionRequestFrom:[tmpPresence from]];   
} 

नीचे जोड़ने विधि

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence ; 
method 
संबंधित मुद्दे