XMPP检索openfire服务器+ iphone SDK上的公共房间

时间:2013-11-08 06:54:40

标签: iphone xmpp xmppframework multiuserchat

我正在使用XMPPFramework在iphone中开发聊天应用程序。一切都很好,但坚持到底。我想检索所有公共房间的列表,但是在XMPPFramework中找不到任何方法。那么有人可以帮助我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

以下是获取所有房间列表的代码

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

如果您有代码来获取特定用户的房间,请分享

答案 1 :(得分:1)

我使用此代码直接查询服务器,但我不确定这是最好的方法。

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

希望这有助于某人。

顺便说一句,如果你采用这个解决方案,那么你必须在委托方法中做一些解析:

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

我最好的方法是在连接开始后解析方法:

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

然后你检查

  [[sender] from] domain]

如果包含"会议。"然后你可以认为发件人是一个房间,最后你可以添加到NSMutableArray,例如。 此外,当创建新房间时,将调用didReceivePresence,因此解析器将添加新房间。

所以,你有:

NSMutableArray* rooms;

您的方法将是:

-(NSMutableArray*)getRooms {
    return _rooms;
}