smack api获取openfire服务器上的所有公共房间

时间:2011-06-27 16:10:54

标签: java xmpp openfire smack

我正在使用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");

如果有人可以向我发送链接或提供如何完成此操作的示例,将不胜感激。

1 个答案:

答案 0 :(得分:2)

看起来像 MultiUserChat.getHostedRooms()就是您要找的。