Eu uso este código para consultar diretamente o servidor, mas não tenho certeza se essa é a melhor maneira.
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 isso ajude alguém.
A propósito, se você adotar esta solução, precisará fazer alguma análise no método delegado:
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq {
}
Eu sou a melhor maneira de analisar o método assim que a conexão é iniciada:
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {
/* parse */
}
Então você verifica
[[sender] from] domain]
se contém "conferência". Então você pode pensar que o remetente é uma sala e, finalmente, você pode adicionar ao NSMutableArray, por exemplo. Além disso, quando uma nova sala será criada, o DidReceivePresence será chamado, para que o Parser adicionará a nova sala.
Então você tem:
NSMutableArray* rooms;
Seu método será:
-(NSMutableArray*)getRooms {
return _rooms;
}