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