2016-08-19 3 views
0

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

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

Спасибо.

+0

Без приглашения я не думаю, что это возможно, но вы можете настроить слушателя и пригласить покидающего пользователя обратно в комнату. –

+0

Спасибо @MoatezBouhdid - попробовал отправить приглашение вручную обратно, но уходящий пользователь просто не присоединился! :-( – vikram17000

+0

Был в состоянии заставить пользователя воссоединиться без приглашения - просто нужно было повторно присоединиться в нужном месте ... – vikram17000

ответ

0

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

вам понадобятся следующие шаги сделать:

1) При создании стойких к конференции, закладки в первый после к конференции присоединиться. (=> Сохранить на дб к конференции имя и пароль)

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

3) На входе/воссоединиться retrive списка закладка

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

5) Обеспечить условие удаления закладки (на основе временной метки, сессии, явный запрос и так далее).

Official specifications

+0

Большое спасибо @MrPk - да, я пытаюсь добиться того же. Это №4 в вашем шаги, которые не выполняются. Даже если я отправлю новое приглашение указанному пользователю, он/она не может присоединиться к комнате из своих локально сохраненных закладок (в которых нет ничего, кроме списка JID с более ранними номерами в комнате (так как я не храню pwds)) – vikram17000

+0

Вам не нужно действительно отправлять приглашение, в теории вы можете принудительно присоединиться к команде так же, как suceffull принять приглашение. Конечно, проверьте, имеет ли MUC пароль (если имеет, вы не можете присоединиться, не вставляя его снова). Конфигурация рекламной комнаты ищет необычные комбо params. Я использую этот способ на основе Openfire + Smack API, но он не зависит от реализации. – MrPk

+0

Спасибо @MrPk - позвольте мне попробовать с дальнейшим тестированием ... – vikram17000

0

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

+0

Спасибо @Sabbir ... да, я играл с новым модулем MUC/Sub, но столкнулся с такой же проблемой там ... если только я не смогу заставить участника комнаты вернуться в комнату , Я не могу найти механизм для использования подписки. Не уверен, есть ли у вас какие-то дальнейшие идеи ...? – vikram17000

+0

Нашел решение - я собирался воссоединиться не в том месте! – vikram17000