加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_盐城站长网 (https://www.0515zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

ejabberd源码分析《三》客户端数据处理

发布时间:2021-05-27 08:46:00 所属栏目:大数据 来源:网络整理
导读:副标题#e# 参考 http://www.cnblogs.com/yjl49/archive/2011/09/02/2371964.html 1.客户端连接服务器后,发送消息给服务器的xml数据处理在ejabberd_c2s中。 ?? ejabberd_c2s 是一个gen_fsm 状态机,在socket连接建立之后创建。 ?? 初始状态为 wait_for_stre

所以从最终结果来看 ejabberd_hooks:run_fold/4? 方法就是去表hooks查找并调用所需的函数返回调用结果.

  1. PresenceEl?=?ejabberd_hooks:run_fold(??
  2. ???????????????????????c2s_update_presence,??
  3. ???????????????????????Server,??
  4. ???????????????????????NewEl,??
  5. ???????????????????????[User,?Server])??
针对上面的代码就是:

??????? 使用{c2s_update_presence,Server}作为key 在表hooks 中查找 要调用的方法列表,并使用[User,Server] 作为参数进行调用.


这个key具体找到什么样的方法呢? 我们可以在源码中查找下:

  1. root@ubuntu:??grep?*.erl?-e?c2s_update_presence??

查找结果中可以看到

mod_vcard_xupdate.erl?????????????? ejabberd_hooks:add(c2s_update_presence,Host


我们在mod_vcard_xupdate.erl中找到这段代码:

  1. start(Host,?_Opts)?->??
  2. ????mnesia:create_table(vcard_xupdate,??
  3. ????????????????????????[{disc_copies,?[node()]},??
  4. ?????????????????????????{attributes,?record_info(fields,?vcard_xupdate)}]),??
  5. ????ejabberd_hooks:add(c2s_update_presence,??
  6. ????????????????MODULE,?update_presence,?100),??
  7. ????ejabberd_hooks:add(vcard_set,?vcard_set,??
  8. ????ok.??
update_presence就所我们所要找的方法了.

(编辑:网站开发网_盐城站长网 )

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!