4
votes

I am using the XMPP smack api to connect to an Openfire server. I am trying to query the server to return all public rooms available without knowing this names of the rooms in advance. The goal of this is so that my client can display a list of all public rooms available and join them accordingly. The Smack Extensions Documentation provides several examples of returning room information from the server however none of them seem to fit my need.

One example requires you to know the name of the room beforehand, which is no good if you want to display available rooms that the client otherwise has no knowledge of. The code for this example is as follows.

 // Discover information about the room [email protected]
  RoomInfo info = MultiUserChat.getRoomInfo(conn, "[email protected]");
  System.out.println("Number of occupants:" + info.getOccupantsCount());
  System.out.println("Room Subject:" + info.getSubject());

Another example allows you to query the rooms that all of your contacts are currently in. This seems to be a very indirect way of getting room names and has the potential to leave some of the rooms out. As XMPP is a server based protocol and not a p2p based protocol this does not seem like the most logical way of accomplishing this (although please correct me if I am wrong). This code example is as follows

 Iterator joinedRooms = MultiUserChat.getJoinedRooms(conn, "[email protected]/Smack");

If someone could either please send me a link or provide an example of how to accomplish this it would be greatly appreciated.

1

1 Answers

2
votes

It looks like MultiUserChat.getHostedRooms() is what you are looking for.