Я использую API-интерфейс XMPP smack для подключения к серверу Openfire. Я пытаюсь отправить запрос на сервер, чтобы вернуть все общедоступные комнаты, не зная заранее этих названий комнат. Цель этого состоит в том, чтобы мой клиент мог отобразить список всех общедоступных комнат и присоединиться к ним соответственно. Документация Smack Extensions содержит несколько примеров возврата информации о комнате с сервера, однако ни один из них, похоже, не соответствует моим потребностям.
Один пример требует, чтобы вы заранее знали название комнаты, что бесполезно, если вы хотите отобразить доступные комнаты, о которых клиент ничего не знает. Код для этого примера выглядит следующим образом.
// 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");
Если кто-то может либо выслать мне ссылку, либо предоставить пример того, как этого добиться, это было бы очень признательно.