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

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

原文链接:http://www.cnblogs.com/lovechengcheng/p/4083398.html

时间: 2024-11-06 02:57:12

ejabberd聊天室离线消息的相关文章

Java网络编程 - 基于UDP协议 实现简单的聊天室程序

最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理. "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: 将客户端的信息(进入了哪一个聊

xmpp和OpenFire示例,即时聊天室,支持离线消息

让我说说为什么写这个博客,这是因为我在上周末的研究XMPP和OpenFire,从互联网上下载Demo,但跑不起来.它花了很长的时间.它被改造.抬高.篇博文也是希望后边学习XMPP和OpenFire的同学下载后直接执行.少走弯路了.时间就是金钱,不要花费不必要的时间,也希望大家都能有分享精神.,有问题能够发邮件给我([email protected]) 关于xmpp和openfire的资料请百度百科一下 下面展示一个聊天程序.所谓万事都要有Helloworld嘛,这个demo能够做为学习xmpp和

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(八) 之 用 Redis 实现用户在线离线状态消息处理

前言 上篇的预告好像是“聊天室的小细节,你都注意到了吗?”.今天也是为那篇做铺垫吧.之前的版本有好多问题,比如:当前登录用户是否合法问题,userid参数如果随便传后台没有验证.还有一个致命的问题,用户AB都在线,但是如果A没有打开B的窗口或者B没有打开A的窗口,那么发消息,对方是收不到的.因为他们没有进入到同一个组里面.本篇讲述了一些Redis的东西.由于项目本身就是为了学习和练习一些东西.所以,Redis并不是我的强项,只不过随便研究研究,具体专业的用法我也不太会.还在学习中... 实现思路

如何解决群聊(MUC)聊天室重复存储、接收自己发送的消息的问题

CHENYILONG Blog 如何#解决方案#群聊(MUC)聊天室重复存储.接收自己发送的消息 编号 项目 描述 1 问题描述 单聊没问题,群聊会出现自动回复的问题 数据库中存储的数据出现的问题 界面上出现的问题:类似自动回复.回音壁一样一模一样地回答.  2 问题产生的原因 3 群聊基本的原理示意图 聊天内容的显示是经由从数据库进行的读取排序, 4 #解决方案# 拦截阻挡红色区域的执行  5 失败的尝试:尝试但是没有效果的方法 // AppDelegate.m中#pragma 接收消息代理监

聊天室技术-处理异常离线的方法

某些网友由于线路掉线,死机等原因,不能通过正常的途径离开聊天室,造成在线人数不能正常显示!解决的方法一般为 1 建立在线人数文件,里面保存在线人的id/pass/time 其中time 为最后的更新时间 2 聊天程序正常运行时每隔一段时间更新自己的 id/pass/time 通知系统自己在线,一般可以为1-2分钟 3 系统每格一段时间扫描一次在线人名单,查找那些已经超过规定时间(比如5分钟)没有更新的id,确认为已经异常离线 4 在线人数为文件里的行数,名单为行数据 我的现在提供下载的聊天室就是

Openfire 多人聊天室 消息记录的问题

============问题描述============ 问个问题啊  openfire聊天室的时候 每次退出聊天室再次进入的时候 都会获取以前的消息记录 怎么让不获取此记录呢? 我看网上有一种说法是 DelayInformation inf = (DelayInformation) message.getExtension( "x", "jabber:x:delay"); System.out.println("判断消息"); if (inf 

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十四)之漏掉的客服消息

前言 不知不觉已经十四篇了,其实已经没有什么可写了.但是突然发现layim中带的客服功能没有用到.于是乎,抽点时间完成吧.其实之前的工作已经把客服功能完成了一大半,剩下的我们稍微调整即可.今天的演示我们放在后边,直接进入讲解. 客服思路讲解 大家去一些公司网站都会发现,网页侧面或者自动弹出一些客服聊天框,人家很热情的和你交谈.我们也可以用layim来实现.首先,页面添加一个按钮,点击按钮触发客服模式. <a onclick="javascript:global.other.kefu(148

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(五) 之 加好友,加群流程,消息管理和即时消息提示的实现

前言 前前一篇留了个小问题,在上一篇中忘了写了,就是关于LayIM已经封装好的上传文件或者图片的问题.对接好接口之后,如果上传速度慢,界面就会出现假死情况,虽然文件正在上传.于是我就简单做了个图标替代来增强用户体验. 上传中... 上传完成后 是不是很简单啊,接下来进入正题. 业务介绍 LayIM中的加好友可以说是不太必要的逻辑,而且其实大部分在模仿QQ,当然业务复杂度肯定没法和QQ比.主线,就是用户A请求添加用户B为好友,用户B收到消息提示之后点击同意或者拒绝或者直接忽略,然后在将消息反馈到用

UDP聊天器 服务器版 支持离线消息 支持净网过滤

#服务器端 #========================================================== #导入模块import socketimport threadingimport re#设置全局变量flagflag = 0#设置离线消息列表msg_list = []#创建udp套接字udp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)#绑定ip端口udp_server_socke