我正在使用 XMPPFramework 在 iphone 中开发一个聊天应用程序。一切都很好,但卡在了这一点上。我想检索所有公共房间的列表,但在 XMPPFramework 中找不到方法。那么有人可以帮我解决这个问题吗?
问问题
1059 次
2 回答
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];
如果您有获取特定用户房间的代码,请分享
于 2013-12-06T09:09:33.840 回答
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]
如果包含“会议”。然后你可以认为 sender 是一个房间,最后你可以添加到 NSMutableArray,例如。此外,当创建新房间时,将调用 didReceivePresence,因此解析器将添加新房间。
所以你有了:
NSMutableArray* rooms;
您的方法将是:
-(NSMutableArray*)getRooms {
return _rooms;
}
于 2014-10-17T11:12:06.187 回答