Выйти из клиентов из XMPP - PullRequest
0 голосов
/ 17 января 2012

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

Ответы [ 2 ]

2 голосов
/ 21 января 2012

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

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

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

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

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

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

Спасибо

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...