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

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

最新文章

  1. js event 事件冒泡和事件捕获详细介绍
  2. SQL Server去掉字段内的双引号
  3. HDU 4704 Sum (高精度+快速幂+费马小定理+二项式定理)
  4. html select 下拉箭头隐藏
  5. JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
  6. div+css的兼容性问题和解决方法
  7. DUILIB创建不规则窗体,自定义控件(很不错的几十篇文章)
  8. Android Studio:You need to use a Theme.AppCompat theme (or descendant) with this activity. AlertDialog
  9. Walking Ant(bfs)
  10. linux下 mysql 学习(一)
  11. JVM学习九:JVM之GC算法和种类
  12. 决策树之ID3、C4.5
  13. [Vue] karme/jasmine/webpack/vue搭建测试环境
  14. Linux服务器查看外网IP地址的命令
  15. UVA - 1625 Color Length[序列DP 提前计算代价]
  16. springboot1.5.4 log4j
  17. word2010自定义的多级列表编号变成黑块的解决办法
  18. [LeetCode&amp;Python] Problem 661. Image Smoother
  19. Linux 文件系统介绍
  20. Xcode 在读写上提速100倍

热门文章

  1. hdu1722
  2. JSON 和 JSONP 两兄弟
  3. Chrome开发者控制台的这些功能你都知道吗?
  4. angularJS懒加载依赖模块
  5. PHP中使用CURL之备忘(一)
  6. wpf为ListBox添加渐变
  7. ECOS-Ecstore证书生产失效问题排查
  8. java poi 导出Excel文件
  9. textview设置不同字体大小
  10. C3P0连接池参数详解