Utilizo este código para consultar el servidor directamente, pero no estoy seguro de que esa sea la mejor manera.
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];
Espero que esto ayude a alguien.
Por cierto, si adopta esta solución, entonces debe hacer algo de análisis en el método delegado:
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq {
}
Lo que es la mejor manera es analizar el método una vez que la conexión ha comenzado:
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {
/* parse */
}
Entonces lo comprobas
[[sender] from] domain]
Si contiene "conferencia". Entonces puede pensar que el remitente es una habitación y finalmente puede agregar a nsmutableArray, por ejemplo. Además, cuando se creará una nueva habitación, se llamará a DidReceivePresence, por lo que Parser agregará la nueva habitación.
Así que tienes:
NSMutableArray* rooms;
Tu método será:
-(NSMutableArray*)getRooms {
return _rooms;
}