0

我想通过存在“不可见”为 ejabberd-2.1.12 添加一种在 MUC 中不可见的可能性(我知道在 3.xx 版本的 ejabberd 中,这将被弃用,-我将通过 http-bind 为站点执行此操作) .

所以任务是:发送非定向存在“不可见”,并且在每个连接的房间用户中更改它的 StateData。

所以我修改了 ejabberd_c2s.erl 并且当用户改变他的非定向存在时,他发送到 mod_muc_room.erl 通知

功能 mod_muc_room.erl :

room_state() ->
 receive
    Msg ->  (any data about user, presence),
 room_state()
end.

所以房间知道用户改变了他的存在,它应该改变它自己的状态数据,但是我怎样才能得到这个值,修改和注入(替换)到这个房间呢?

4

1 回答 1

0

mod_muc_room使用gen_fsm 行为。您可以判断,因为该行位于文件顶部附近:

-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。这就是您修改房间状态的方式。

于 2013-05-02T11:21:16.390 回答