2012-01-17 3 views
0

У меня есть приложение xmpp/ejabberdb, которое использует внешнюю службу для предоставления событийных функций, но когда эта служба становится недоступной, я хочу отключить/выйти из всех моих клиентов. Это возможно? Как?Выйти клиентов из XMPP

ответ

2

Я получил работу, как мне было нужно. На самом деле, я не нашел простого способа заставить мой собственный сервер выйти из всех подключенных пользователей, учитывая какую-то ситуацию, поэтому я вникнул в код ejabberd и понял способ сделать это сам.

В модуле ejabberd_c2s.erl, когда клиент выходит из системы или его сокет по какой-либо причине отбрасывается, FSM завершается, выполняя всю необходимую очистку для поддержания согласованности ejabberd.

Что мне нужно было сделать, так это просто создать выгруженную функцию shutdown/1 в этом модуле, которая вызывает gen_fsm: send_all_state_event/2, отправляя сигнал для ее завершения. Что касается каждого подключения, то есть один процесс c2s, мне нужно вызвать эту функцию для каждого пользователя.

--- ОБНОВЛЕНИЕ --- На самом деле нет никакой необходимости создавать эту функцию выключения, так как ejabber_c2s уже имеет возможность обрабатывать «закрытые» сигнал, который делает то же самое. Таким образом, вместо создания функции shutdown достаточно просто выполнить ge_fsm: send_event (C2SPid, closed). --- ОБНОВЛЕНИЕ ---

Чтобы обнаружить C2s PID процесса пользователя я просто использовать ejabberd_sm: get_session_pid/1 или ejabberd_sm: dirty_get_sessions_list/0 (для всех сеансов).

Это работало отлично для меня, но если у кого-то есть лучшая идея, добавьте сюда.

Thanks

0

Я не знаю специфики ejabberd, но вы можете написать собственный компонент XMPP, который опросит внешнюю службу (или прослушивает события присутствия, если это другой компонент XMPP), а затем выгружает пользователей, когда служба становится недоступной.

+0

Пользовательский компонент XMPP - это именно то, что у меня есть. Дело в том, как я могу выйти из системы клиентов? Я не эксперт в XMPP/Ejabberd, поэтому я бы хотел узнать, как я автоматически выхожу из системы. – RobisonSantos

Смежные вопросы