我正在使用 XMPP smack api 连接到 Openfire 服务器。我正在尝试查询服务器以在事先不知道房间名称的情况下返回所有可用的公共(public)房间。这样做的目的是让我的客户可以显示所有可用公共(public)房间的列表并相应地加入它们。 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 是基于服务器的协议(protocol)而不是基于 p2p 的协议(protocol),这似乎不是实现此目的的最合乎逻辑的方式(尽管如果我错了请纠正我)。此代码示例如下
Iterator joinedRooms = MultiUserChat.getJoinedRooms(conn, "user3@host.org/Smack");
如果有人可以给我发送一个链接或提供一个如何完成此操作的示例,我们将不胜感激。
最佳答案
看起来 MultiUserChat.getHostedRooms() 就是您要查找的内容。
关于java - smack api获取openfire服务器上的所有公共(public)房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6495737/