Есть ли способ определить, к каким Mulit User Conferences (MUC) присоединился пользователь? - PullRequest
6 голосов
/ 28 января 2012

Интересно, есть ли способ сделать запрос к серверу XMPP (передавая JID пользователя?), Чтобы выяснить, в каких комнатах чата в настоящее время находится этот пользователь?Если нет, можем ли мы запросить у сервера jabber список всех активных комнат чата?

Кстати, у нас запущен ejabber для многопользовательского чата.Решение с использованием библиотеки Java (smack?) Было бы идеальным.

Ответы [ 3 ]

3 голосов
/ 29 января 2012

Как упомянул Джо Хильдебранд, такой стандартной функции не существует, так как это разрешает нарушение конфиденциальности через XMPP, поэтому вы не можете ожидать этого от Smack. Возможно, с правами администратора у вас может быть собственное расширение протокола, которое делает это, но это кажется рискованным.

Однако на уровне сервера вы должны иметь возможность написать собственный модуль для ejabberd, который будет запрашивать или индексировать все комнаты, в которых находятся пользователи. Это не является стандартным, и в него вовлечена разработка плагинов.

2 голосов
/ 02 марта 2013

Есть две (возможно три) сущности XMPP, которые имеют эту информацию:

  • компонент MUC XMPP, который обеспечивает комнату MUC
  • пользовательский клиент XMPP (или лучше используемая пользователем библиотека XMPP)
  • возможно сервер (ы) XMPP (но давайте игнорируем это)

На момент написания этой статьи не было стандартизированного (с точки зрения XMPP XEP) способа запроса этой информации. Как отметил Джо Хильдебранд, это приведет к утечке информации, что в большинстве случаев не то, что нам нужно.

Но вы можете расширить компонент MUC для предоставления этой информации (помните, что XMPP легко расширяемый) или клиентскую библиотеку XMPP. Обычный подход будет через запрос iq get. Например:

<iq type='get' from='juliet@capulet.lit/balcony' to='capulet.lit' id='q1'>
  <query xmlns='http://jabber.org/protocol/muc#joinedrooms'/>
</iq>

Объекты, которые поддерживают этот запрос, затем сообщат о присоединенных комнатах запрошенного объекта. Также они могут объявить функцию http://jabber.org/protocol/muc#joinedrooms в своей информации об обнаружении услуг.

Обратите внимание, что это расширение вымышленного протокола, приведенное в качестве примера. Я никогда не видел его в реальном использовании

Если компонент MUC предоставляет эту функцию, клиент не может управлять ею, если эта информация предоставлена. Но если клиент предоставляет эту функцию, то, конечно, он может контролировать, кто может получить эту информацию. Вы можете решить, какой подход лучше в вашем случае.

0 голосов
/ 28 января 2012

Получить все чаты не проблема, просто используйте этот запрос .

Кажется, уже есть вопрос о том, как получить комнаты с помощью smack. Смотри здесь .

...