Какие состояния @Amiramix точны, но это не вся картина.
Существует механизм с низкой связью для обмена событиями между модулями в ejabberd - это концепция hooks and handlers. Ссылка указывает на документацию MongooseIM, но этот механизм более или менее одинаковый в обеих кодах.
В общем, один модуль может вызвать крюк, который одинаково вызов функции, но в зависимости от зарегистрированных обработчиков может или не может привести к некоторому действию (ами), которые осуществляют. Другие модули могут регистрировать обработчики для выбранных им крючков. Если вы создаете модули, о которых идет речь, это механизм, который может дать вам необходимый канал связи.
Чтобы сделать вещи более конкретными - каждый раз, когда mod_filter
нуждается в некоторой информации, доступной только mod_calculate
, она может работать ejabberd_hooks:run_fold/4
с пользовательским именем крючка. Если mod_calculate
регистрирует обработчик для этого крючка (обычно в его функции start
), он может возвращать некоторые данные, относящиеся к mod_filter
. Однако разные модули могут реализовать обработчик для крючка, поэтому mod_filter
и mod_calculate
не связаны так, как если бы вы использовали прямой вызов функции (например, mod_calculate:some_function(...)
).
Большое спасибо за ваш ответ! – Jack
Добро пожаловать! :-) – Amiramix