Frage

Ich entwickle eine Chat -Anwendung im iPhone mit XMPPFramework. Alles funktioniert großartig, steckt aber an dem Punkt. Ich möchte eine Liste aller öffentlichen Räume abrufen, aber es gibt keine Methode in XMPPFramework. Kann mir also jemand helfen, dieses Problem zu lösen?

War es hilfreich?

Lösung

Hier ist der Code, um die Liste aller Zimmer zu erhalten

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

Wenn Sie Code haben, um den Raum eines bestimmten Benutzers zu erhalten, teilen Sie ihn bitte

Andere Tipps

Ich verwende diesen Code, um Server direkt abzufragen, aber ich bin mir nicht sicher, ob dies der beste Weg ist.

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

Hoffe das hilft jemandem.

Wenn Sie diese Lösung übernehmen, müssen Sie übrigens eine Delegate -Methode analysieren:

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

Ich Sache am besten ist es, die Methode zu analysieren, sobald die Verbindung begonnen hat:

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

Dann überprüfen Sie

  [[sender] from] domain]

Wenn "Konferenz" enthält. Dann können Sie denken, dass der Absender ein Zimmer ist und schließlich zum Beispiel zu NSmutablearray hinzufügen. Auch wenn ein neuer Raum erstellt wird, wird didreceivePresence aufgerufen, sodass Parser das neue Raum hinzufügt.

Also hast du:

NSMutableArray* rooms;

Ihre Methode wird:

-(NSMutableArray*)getRooms {
    return _rooms;
}  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top