【发布时间】:2011-09-23 15:44:27
【问题描述】:
我正在使用 XMPP smack api 连接到 Openfire 服务器。我正在尝试查询服务器以返回所有可用的公共房间,而无需事先知道房间的名称。这样做的目的是让我的客户可以显示所有可用公共房间的列表并相应地加入它们。 Smack Extensions Documentation 提供了几个从服务器返回房间信息的示例,但它们似乎都不符合我的需要。
一个示例要求您事先知道房间的名称,如果您想显示客户不知道的可用房间,这并不好。本例代码如下。
// Discover information about the room roomName@conference.myserver
RoomInfo info = MultiUserChat.getRoomInfo(conn, "roomName@conference.myserver");
System.out.println("Number of occupants:" + info.getOccupantsCount());
System.out.println("Room Subject:" + info.getSubject());
另一个示例允许您查询所有联系人当前所在的房间。这似乎是获取房间名称的一种非常间接的方式,并且可能会遗漏一些房间。由于 XMPP 是基于服务器的协议,而不是基于 p2p 的协议,这似乎不是实现这一点的最合乎逻辑的方式(尽管如果我错了,请纠正我)。此代码示例如下
Iterator joinedRooms = MultiUserChat.getJoinedRooms(conn, "user3@host.org/Smack");
如果有人可以请给我一个链接或提供如何完成此操作的示例,将不胜感激。
【问题讨论】: