文档章节

基于ejabberd简单实现xmpp群聊离线消息

cisiqo
 cisiqo
发布于 2014/11/08 12:00
字数 346
阅读 605
收藏 1

首先,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屏蔽以下两行代码:

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

mod_offline: 将下面一行代码修改

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

修改后的:

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

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

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

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)),

修改后的代码:

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

© 著作权归作者所有

共有 人打赏支持
cisiqo
粉丝 35
博文 27
码字总数 5183
作品 0
武汉
程序员
私信 提问
说说ejabberd离线消息踩过的坑

使用过ejabberd的或许知道,也许踩过这个坑。那么就说说我们踩过的ejabberd的离线消息的坑吧。 ejabberd原生的离线消息的机制是,一般用户保存100条离线消息,管理员保存5000条离线消息。超过...

nidongwo-
2016/08/29
44
0
企业级 XMPP 通信工具--ttalk.im

说到 IM 通信,一般首选都是 XMPP,并且首推 Ejabberd。国内使用 Ejabberd 厂家很多,对企业级的 IM 有需求的厂家很多,同时希望能快速集成一个 IM 的厂家就更多了。但是在这些厂家中很多都抱...

匿名
2016/01/14
2.4K
0
共享和出售即时通讯源代码,类似微信陌陌,全新定义基于Tiagse的社交聊天系统

这套IM系统是我个人自主开发 完全基于Tiagse ,主要功能为:Android、iOS和服务端,可以支持包括文字 图片,语音等任何消息形式,系统采用的成熟的XMPP协议+CentOS 6.5+Jdk1.8+mysql5.6+mon...

iholdcode
2015/08/13
1K
6
基于ejabberd实现各个客户端消息同步

先上图再说(左侧是web端,右侧是ios端) ![在此输入图片描述][1] ![在此输入图片描述][2] 要实现上面的功能,如果所有设备都在线的话,那么carboncopy(xmpp xep-0280协议)这个模块是可以实...

nidongwo-
2015/03/28
0
0
Android即时通讯--YiIM

基于Xmpp的Android即时通讯手机应用软件YiIM第二版 功能日志: 登录 好友获取 文本消息发送与接收,离线消息接收 消息记录,会话记录 添加好友 发送语音短消息 发送大表情 发送文字表情混合消...

bjhongping
2014/09/16
7.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

NEO 节点介绍

全节点(full nodes)是存储 NEO 区块链全部数据的节点,通过 P2P 的方式与区块链网络连接,在区块链网络中,所有的全节点都是平等的,既充当客户端又充当服务器。 NEO 有两个全节点程序: ...

NEO-FANS
13分钟前
0
0
内网穿透大杀器--EarthWorm

0x00 前言 如果感觉本文对你有帮助,请在文章末尾点个赞,谢谢表哥们支持! 当你在内网渗透,并且拿下一台机器的权限时,你是不是觉得已经算是一次完整的渗透了? 不来一次内网漫游,渗透是不...

刀剑如梦
18分钟前
2
0
PiggyMetrics分布式框架

https://github.com/sqshq/PiggyMetrics

丁建祥
20分钟前
0
0
零距离接触阿里云时序时空数据库TSDB

概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增。 阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空...

阿里云云栖社区
28分钟前
4
0
OkHttpClient封装

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; import java.util.TreeMap; import java.util.Map.Entry; import o......

尘叙缘
30分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部