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 

    --------- 签名 -----------
    本文版权归本博作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    HDU 1261 字串数(排列组合)
    Codeforces 488C Fight the Monster
    HDU 1237 简单计算器
    POJ 2240 Arbitrage
    POJ 3660 Cow Contest
    POJ 1052 MPI Maelstrom
    POJ 3259 Wormholes
    POJ 3268 Silver Cow Party
    Codesforces 485D Maximum Value
    POJ 2253 Frogger(最短路)
  • 原文地址:https://www.cnblogs.com/lovechengcheng/p/4083398.html
Copyright © 2011-2022 走看看