zoukankan      html  css  js  c++  java
  • 基于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屏蔽以下两行代码:

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

    mod_offline: 
    将下面一行代码修改

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

    修改后的:

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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)),

    修改后的代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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 

    --------- 签名 -----------
    本文版权归本博作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    AD设计过程中的注意事项
    ds18b20再硬件设计部分的注意事项
    时序设计的注意事项
    【HackerRank】 Game Of Thrones
    【HackerRank】Halloween party
    【HackerRank】The Love-Letter Mystery
    【HackerRank】Gem Stones
    【HackerRank】Service Lane
    【HackerRank】Utopian tree
    【leetcode刷题笔记】Word Ladder II
  • 原文地址:https://www.cnblogs.com/lovechengcheng/p/4083398.html
Copyright © 2011-2022 走看看