Domanda

Sto sviluppando un'applicazione di chat in iPhone utilizzando XMPPFramework. Tutto funziona alla grande ma bloccato nel punto. Voglio recuperare un elenco di tutte le sale pubbliche, ma non c'è metodo trovato in XMPPFramework. Quindi qualcuno può aiutarmi a risolvere questo problema?

È stato utile?

Soluzione

Ecco il codice per ottenere l'elenco di tutta la stanza

NSString* server = @"chat.shakespeare.lit"; //or whatever the server address for muc is
XMPPJID *servrJID = [XMPPJID jidWithString:server];
XMPPIQ *iq = [XMPPIQ iqWithType:@"get" to:servJID];
[iq addAttributeWithName:@"from" stringValue:[xmppStream myJID].full];
NSXMLElement *query = [NSXMLElement elementWithName:@"query"];
[query addAttributeWithName:@"xmlns" stringValue:@"http://jabber.org/protocol/disco#items"];
[iq addChild:query];
[xmppStream sendElement:iq];

Se hai un codice per ottenere la stanza dell'utente specifico, condividilo

Altri suggerimenti

Uso questo codice per query server direttamente, ma non sono sicuro che sia il modo migliore.

 XMPPIQ *iq = [[XMPPIQ alloc] initWithType:@"get"];
 NSString* conferenceHost = [NSString stringWithFormat:@"conference.%@", _xmppStream.hostName];
[iq addAttributeWithName:@"from" stringValue:conferenceHost];
[iq addAttributeWithName:@"to" stringValue:_host];
DDXMLElement *query = [DDXMLElement elementWithName:@"query" xmlns:@"http://jabber.org/protocol/disco#items"];
[iq addChild:query];
[_xmppStream sendElement:iq];

Spero che questo aiuti qualcuno.

A proposito, se adotti questa soluzione, allora devi fare qualche analisi nel metodo delegato:

 - (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq {
  }  

Mi occupo del modo migliore è analizzare il metodo una volta che la connessione è iniziata:

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {
    /* parse */
}

Quindi controlli

  [[sender] from] domain]

Se contiene "Conferenza". Quindi puoi pensare che il mittente sia una stanza e infine puoi aggiungere a NSMutableArray, ad esempio. Inoltre, quando verrà creata una nuova stanza, verrà chiamata DidReceivePresence, quindi Parser aggiungerà la nuova stanza.

Quindi, hai:

NSMutableArray* rooms;

Il tuo metodo sarà:

-(NSMutableArray*)getRooms {
    return _rooms;
}  
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top