Pregunta

Estoy desarrollando una aplicación de chat en iPhone usando XMPPFramework. Todo funciona muy bien pero atascado en el punto. Quiero recuperar una lista de todas las habitaciones públicas, pero no se encuentra ningún método en XMPPFramework. Entonces, ¿alguien puede ayudarme a resolver este problema?

¿Fue útil?

Solución

Aquí está el código para obtener la lista de toda la habitación.

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

Si tiene código para obtener la habitación del usuario específico, compártelo

Otros consejos

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;
}  
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top