基于ejabberd简单实现xmpp群聊离线消息
基于ejabberd简单实现xmpp群聊离线消息
nidongwo- 发表于3年前
基于ejabberd简单实现xmpp群聊离线消息
  • 发表于 3年前
  • 阅读 584
  • 收藏 1
  • 点赞 1
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 基于ejabberd简单实现xmpp群聊离线消息

首先,xmpp服务器是基于ejabberd。离线消息模块是mod_interact,原地址地址:https://github.com/adamvduke/mod_interact; 修改后实现群聊离线消息:https://github.com/Joywok/mod_interact

不仅仅要修改这一个文件,还涉及到ehabberd_sm、mod_muc_room、mod_offline三个模块的修改。

以上三个文件仅仅只需要屏蔽或者修改几行代码就能实现了,很简单的。

ehabberd_sm屏蔽以下两行代码:

<<"groupchat">> ->
bounce_offline_message(From, To, Packet);

mod_offline: 将下面一行代码修改

if (Type /= <<"error">>) and (Type /= <<"groupchat">>)

修改后的:

if (Type /= <<"error">>)

mod_muc_room这个模块多要修改几行,muc只是给在线的用户发送消息,那么不在线的用户就收不到了,所以在发送消息那块把发送在线的用户修改为muc的成员就ok了。

把以下一个遍历代码修改:

lists:foreach(
 fun({_LJID, Info}) ->
 ejabberd_router:route(
 jlib:jid_replace_resource(
StateData#state.jid,
FromNick),
Info#user.jid,
 Packet)
 end,?DICT:to_list(StateData#state.users)),

修改后的代码:

lists:foreach(
 fun(Info) ->
 {Jid,_} = Info,
{Email,Server,Source}=Jid,
To={'jid',Email,Server,Source,Email,Server,Source},
ejabberd_router:route(
jlib:jid_replace_resource(
 StateData#state.jid,
FromNick),
To,
Packet)
end,?DICT:to_list(StateData#state.affiliations)),

重新编译模块,替换原来的模块,重启ejabberd服务器就ok了。

按照这个就能简单的实现群聊离线消息了。

贴上github实现地址:https://github.com/cisiqo/ejabberd-module-dev

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 34
博文 18
码字总数 4927
×
nidongwo-
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: