Question

Je développe une application de chat dans iPhone à l'aide de XMPPFramework. Tout fonctionne très bien mais coincé au point. Je veux récupérer une liste de toutes les salles publiques, mais il n'y a pas de méthode trouvée dans XMPPFramework. Alors, quelqu'un peut-il m'aider à résoudre ce problème?

Était-ce utile?

La solution

Voici le code pour obtenir la liste de toutes les pièces

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 vous avez du code pour obtenir la salle de l'utilisateur spécifique, veuillez le partager

Autres conseils

J'utilise ce code pour interroger directement le serveur, mais je ne suis pas sûr que ce soit le meilleur moyen.

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

J'espère que cela aide quelqu'un.

Soit dit en passant, si vous adoptez cette solution, vous devez faire une analyse de l'analyse dans le délégué:

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

Je pense que la meilleure façon est d'analyser la méthode une fois que la connexion a commencé:

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

Ensuite, vous vérifiez

  [[sender] from] domain]

Si contient une «conférence». Ensuite, vous pouvez penser que l'expéditeur est une pièce et enfin vous pouvez ajouter à NSMutableArray, par exemple. De plus, lorsqu'une nouvelle salle sera créée, DiDeceivePresence sera appelée, donc Parser ajoutera la nouvelle salle.

Donc, vous avez:

NSMutableArray* rooms;

Votre méthode sera:

-(NSMutableArray*)getRooms {
    return _rooms;
}  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top