我想为ejabberd-2.1.12添加一种可能性,使其在MUC中通过存在而不可见"隐形" (我知道在exabberd的3.x.x版本中这将被弃用, - 我将通过http-bind为网站做这件事。)
所以任务是:发送非定向存在"隐形"并且在每个连接用户的房间都会更改它的StateData。
所以我修改了ejabberd_c2s.erl,当用户更改他的非定向状态时,他发送到mod_muc_room.erl通知
function mod_muc_room.erl:
room_state() ->
receive
Msg -> (any data about user, presence),
room_state()
end.
所以房间知道用户改变了他的存在并且它应该改变它自己的StateData,但是我如何获得这个值,修改并注入(替换)它到这个房间?
答案 0 :(得分:0)
mod_muc_room
使用gen_fsm behaviour。你可以知道,因为这一行靠近文件的顶部:
-behaviour(gen_fsm).
要接收和处理发送到gen_fsm进程的消息,您不能直接使用receive
,而是向handle_info
函数添加新子句。
例如,有一个处理{process_user_presence, From}
消息的子句。它始于:
handle_info({process_user_presence, From}, normal_state = _StateName, StateData) ->
并最终以类似的方式结束:
{next_state, normal_state, StateData1}
其中StateData1
是StateData
的修改形式。这是你修改房间状态的方法。