smack api получить все публичные комнаты на сервере openfire - PullRequest
4 голосов
/ 27 июня 2011

Я использую 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");

Если кто-то может либо выслать мне ссылку, либо предоставить пример того, как этого добиться, это было бы очень признательно.

1 Ответ

2 голосов
/ 27 июня 2011

Похоже, MultiUserChat.getHostedRooms () - это то, что вы ищете.

...