在Openfire服务器上使用Smack API获取所有公共聊天室

4
我正在使用XMPP Smack API连接到一个Openfire服务器。我试图查询服务器以返回所有公共可用房间,而不知道这些房间的名称。这样做的目的是让我的客户端显示所有可用的公共房间列表并相应地加入它们。Smack扩展文档提供了几个从服务器返回房间信息的示例,但似乎没有一个符合我的需求。
其中一个示例需要您事先知道房间的名称,如果要显示客户端不知道的可用房间,则不好。此示例的代码如下。
 // 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是基于服务器的协议而不是基于点对点的协议,因此这不是实现此目标最合理的方式(如果我错了,请纠正我)。此代码示例如下:

 Iterator joinedRooms = MultiUserChat.getJoinedRooms(conn, "user3@host.org/Smack");

如果有人能够提供一个链接或者提供一个如何完成这个任务的例子,那将不胜感激。
1个回答

2

看起来你需要的是MultiUserChat.getHostedRooms()


谢谢,那个完美地解决了我的问题。我在例子中没看到过那个,可能在 jdocs 中疏忽了。 - pat8719
1
我认为get hostedrooms应该发送用户创建的房间,但是那些用户加入但没有托管的房间呢? - ozmank
嗨@Robin,我无法执行MultiUserChat的任何静态方法。我得到了NullPointerException。在执行此方法之前,我们需要设置什么吗? - KK_07k11A0585
@Robin。在使用这个方法或getJoinedRooms方法时,我得到了空集合。可能的错误是什么?你能帮忙看一下吗?请看我的代码:http://pastie.org/8340999 - Gaurav Arora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接