Присоединение к XMPP MUC Room без приглашения - ejabberd

Для постоянных комнат XMPP, как заставить клиента снова присоединиться к комнате, если он / она отключился один раз? Во время тестирования я обнаружил, что простая отправка строфы присутствия обратно в JID указанной комнаты не делает клиента снова доступным в комнате. Повторный вход в комнату происходит только тогда, когда пользователь получил приглашение (и, таким образом, в нашем случае, если пользователь отключится один раз, ему потребуется еще одно приглашение, чтобы присоединиться к комнате?)?

Если это так, то как лучше всего реализовать автоматическую генерацию таких приглашений для первоначальных участников комнаты, которые переподключаются?

Спасибо.


person vikram17000    schedule 19.08.2016    source источник
comment
Без приглашения я не думаю, что это возможно, но вы можете настроить прослушиватель и пригласить уходящего пользователя обратно в комнату.   -  person Moatez Bouhdid    schedule 20.08.2016
comment
Спасибо @MoatezBouhdid - пробовал отправить приглашение вручную, но уходящий пользователь просто не присоединялся! :-(   -  person vikram17000    schedule 23.08.2016
comment
Удалось заставить пользователя присоединиться без приглашения - просто нужно было повторно присоединиться в нужном месте...   -  person vikram17000    schedule 23.08.2016


Ответы (2)


Лучше всего использовать функцию pubsub и соответствующие закладки MultiUserChat. Вы можете разработать собственный менеджер закладок, если вам нужно что-то отклоненное по вашим особым потребностям.

Вам нужны следующие шаги:

1) При создании постоянного группового чата добавьте групповой чат в закладки после первого присоединения. (=> сохранить имя и пароль группового чата БД)

2) При получении приглашения добавьте групповой чат в закладки после первого присоединения (=> сохраните имя и пароль группового чата в базе данных)

3) При входе в систему / повторном подключении получить список закладок

4) Закладка Foreach -> присоединиться (и назначить слушателей и т. д.)

5) Укажите условие удаления закладки (на основе метки времени, сеанса, явного запроса и т. д.).

Официальные спецификации

person MrPk    schedule 20.08.2016
comment
Большое спасибо @MrPk - да, я пытаюсь добиться того же. Это № 4 в ваших шагах, когда соединение не удается. Даже если я отправлю указанному пользователю новое приглашение, он/она, похоже, не сможет снова присоединиться к комнате из своих локально сохраненных закладок (которые содержат только список JID ранее присоединенных комнат (поскольку я не храню pwds) ). - person vikram17000; 23.08.2016
comment
На самом деле вам не нужно снова отправлять приглашение, теоретически вы можете принудительно присоединиться, как только успешно примете запрос на приглашение. Конечно, проверьте, есть ли у MUC пароль (если есть, вы не можете присоединиться, не введя его снова), конфигурация рекламной комнаты в поисках необычных комбинаций параметров. Я использую этот способ на основе Openfire + Smack API, но он не зависит от реализации. - person MrPk; 23.08.2016
comment
Что ж, это сработало - я ввел принудительное повторное присоединение после запуска приложения вместо пост-аутентификации! Большое спасибо за материалы... - person vikram17000; 23.08.2016

Существует предложенный XEP, и он реализован в последней версии ejabberd, которая поддерживает подписки. . Он предоставляет комнаты MUC как узлы pubsub, чтобы представить концепцию подписчиков комнат MUC.

person Sabbir    schedule 21.08.2016
comment
Спасибо @Sabbir ... да, я играл с новым модулем MUC / Sub, но столкнулся с той же проблемой и там ... если я не смогу заставить участника комнаты вернуться в комнату, я не могу найти механизм для использования подписки . Не уверен, что у вас будут еще идеи...? - person vikram17000; 23.08.2016
comment
Нашел решение - я вставлял rejoin не в то место! - person vikram17000; 23.08.2016