• 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了。

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

  • 相关阅读:
    递归的小实例
    try-catch-finally实例
    集合的排序(正序,倒序,从大到小排序)
    数组的排序(sort和冒泡)
    拦截器的使用,不登录用户不能进行其他操作
    把日志从数据库导出到Excel表格中(poi)
    Java 对Excel进行导入操作
    java 面试题集锦
    端口被占用解决办法
    (转)Java 最常见的 200+ 面试题汇总
  • 原文地址:https://www.cnblogs.com/yanwei-wang/p/4705413.html
Copyright © 2020-2023  润新知