2013-02-02 14 views
9

Sono in grado di creare un MUC utilizzando XMPPFramework e inviare richieste di invito utente per entrare in quella stanza utilizzando il codice seguente.Accettazione invito chatroom

// 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"]; 

Come fa un utente "abc" sapere che ha ricevuto un invito e come può reagire ad esso sia da accettare o rifiutare?

Non sono riuscito a trovare alcuna classe in XMPPFramework che gestisce direttamente l'invito della chat room. La mia ricerca dice che ogni volta che un utente riceve un invito chatroom, metodo delegato di xmmppStream si chiama:

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

In questo messaggio, verificare se la contiene NSXMLElement con il nome "invito", e se contiene quindi invio una richiamata all'utente. Quindi creo la chat room con lo stesso nome del nome della chat da cui l'utente ha ricevuto l'invito ed entra in quella stanza appena creata. Funziona bene ma in modo silenzioso e non efficiente. Voglio sapere se esiste una classe in XMPPFramework disponibile here che potrebbe gestire separatamente l'invito alla chat room. Ad esempio, rilevare, accettare e rifiutare gli inviti alle camere.

Il mio codice per l'estrazione Nome camera:

- (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

Ciao Vishal, mi sono bloccato nel problema simile, è possibile per favore fatemelo sapere Vedi qualche soluzione o approccio con questo ? Grazie – Mangesh

risposta

12

per inviti in camera e declina, implementare XMPPMUCDelegate e dei suoi metodi -xmppMUC:didReceiveRoomInvitation: e -xmppMUC:didReceiveRoomInvitationDecline:.

Per ottenere la stanza JID, chiamare [message from];

Per entrare nella stanza, creare un'istanza XMPPRoom e invocare -joinRoomUsingNickname:history:.

Quindi richiedere all'addetto della classe di camera XMPPRoomDelegate e attuare alcuni dei delegate methods per gestire i messaggi di ricezione nella stanza.

Sembra che al momento non ci sia un modo più automatico per rispondere agli inviti.

Aggiornamento: I callback dei delegati ora ricevono come parametro il JID room, chiarendo un po 'la semantica.

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

Ma posso solo implementare xmpproomDelegate dopo aver creato un xmpproom. I metodi delegati di xmpproom non forniscono alcuna richiamata per l'invito in camera, sono solo per la gestione dei messaggi in entrata e in uscita e di altre cose di una determinata stanza. –

+0

Per questo si desidera 'XMPPMUCDelegate'. – paulmelnikow

+0

sì ma come accetto l'invito ?? come faccio a entrare in quella stanza e gestire tutti i messaggi in arrivo di quella stanza? Devo creare una stanza con lo stesso nome e quindi implementare i suoi metodi delegati come menzionato nella mia domanda ?? –

-1

Basta aggiungere sottostante Codice

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]];   
} 

all'interno del metodo

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence ; 
method 
Problemi correlati