zoukankan      html  css  js  c++  java
  • ejabberd聊天室离线消息

    首先,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了。

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

  • 相关阅读:
    ●BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡
    ●BZOJ 1396 识别子串
    ●UVA 1608 Non-boring sequences
    ●SPOJ 8222 NSUBSTR–Substrings
    ●SPOJ 7258 Lexicographical Substring Search
    ●CodeForces 429D Trick_Function
    ●BZOJ 2555 SubString
    ●洛谷P2664 树上游戏
    ●洛谷P3168 [CQOI2015]任务查询系统
    【UVA1057】Routing
  • 原文地址:https://www.cnblogs.com/yanwei-wang/p/4705413.html
Copyright © 2011-2022 走看看