openfire插件开发-聊天记录插件
来源:互联网 发布:linux打开文件数过多 编辑:程序博客网 时间:2024/05/18 06:19
MessageFilter
package org.jivesoftware.openfire.plugin;import java.io.File;import java.util.List;import org.jivesoftware.openfire.container.Plugin;import org.jivesoftware.openfire.container.PluginManager;import org.jivesoftware.openfire.interceptor.InterceptorManager;import org.jivesoftware.openfire.interceptor.PacketInterceptor;import org.jivesoftware.openfire.interceptor.PacketRejectedException;import org.jivesoftware.openfire.session.Session;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.xmpp.packet.IQ;import org.xmpp.packet.Message;import org.xmpp.packet.Packet;import org.xmpp.packet.Presence;public class MessageFilterPlugin implements Plugin, PacketInterceptor {private static final Logger log = LoggerFactory.getLogger(MessageFilterPlugin.class);private static PluginManager pluginManager;private InterceptorManager interceptorManager;public MessageFilterPlugin() {interceptorManager = InterceptorManager.getInstance();}@Overridepublic void interceptPacket(Packet packet, Session session,boolean incoming, boolean processed) throws PacketRejectedException {this.doAction(packet, incoming, processed, session);}/** * <b>function:</b> 执行保存/分析聊天记录动作 * * @author hoojo * @createDate 2013-3-24 下午12:20:56 * @param packet * 数据包 * @param incoming * true表示发送方 * @param session * 当前用户session */private void doAction(Packet packet, boolean incoming, boolean processed,Session session) {Packet copyPacket = packet.createCopy();if (packet instanceof Message) {Message message = (Message) copyPacket;// 一对一聊天,单人模式if (message.getType() == Message.Type.chat) {log.info("单人聊天信息:{}", message.toXML());debug("单人聊天信息:" + message.toXML());try {System.out.println("信息体 = " + message.getBody());System.out.println("信息from = " + message.getFrom());System.out.println("信息to = " + message.getTo());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {}// 程序执行中;是否为结束或返回状态(是否是当前session用户发送消息)if (processed || !incoming) {return;}// logsManager.add(this.get(packet, incoming, session));// 群聊天,多人模式} else if (message.getType() == Message.Type.groupchat) {List<?> els = message.getElement().elements("x");if (els != null && !els.isEmpty()) {log.info("群聊天信息:{}", message.toXML());debug("群聊天信息:" + message.toXML());} else {log.info("群系统信息:{}", message.toXML());debug("群系统信息:" + message.toXML());}// 其他信息} else {log.info("其他信息:{}", message.toXML());debug("其他信息:" + message.toXML());log.info("单人聊天信息:{}", message.toXML());debug("单人聊天信息:" + message.toXML());System.out.println("信息体 = " + message.getBody());System.out.println("信息from = " + message.getFrom());System.out.println("信息to = " + message.getTo());}} else if (packet instanceof IQ) {IQ iq = (IQ) copyPacket;if (iq.getType() == IQ.Type.set && iq.getChildElement() != null&& "session".equals(iq.getChildElement().getName())) {log.info("用户登录成功:{}", iq.toXML());debug("用户登录成功:" + iq.toXML());}} else if (packet instanceof Presence) {Presence presence = (Presence) copyPacket;if (presence.getType() == Presence.Type.unavailable) {log.info("用户退出服务器成功:{}", presence.toXML());debug("用户退出服务器成功:" + presence.toXML());}}}private void debug(Object message) {if (true) {System.out.println(message);}}@Overridepublic void destroyPlugin() {interceptorManager.removeInterceptor(this);debug("销毁聊天记录插件成功!");}@Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) {// TODO Auto-generated method stubinterceptorManager.addInterceptor(this);pluginManager = manager;debug("添加聊天记录插件成功!");}}
Plugin.xml
<?xml version="1.0" encoding="UTF-8"?><!-- Plugin configuration for the broadcast plugin.--><plugin> <class>org.jivesoftware.openfire.plugin.MessageFilterPlugin</class> <name>MessageFilter</name> <description>MessageFilter messages to users.</description> <author>Jive Software</author> <version>1.9.0</version> <date>9/13/2013</date> <url>http://www.igniterealtime.org</url> <minServerVersion>3.9.0</minServerVersion> </plugin>
下面截取的时候试了很多方法 都是一个信息打印好几次,后来只能判断信息的来源和内容以及发送的对象是不是一样的来判断了。
0 0
- 开发Openfire聊天记录插件
- 开发Openfire聊天记录插件
- 开发Openfire聊天记录插件
- openfire插件开发-聊天记录插件
- 基于开源 Openfire 聊天服务器 - 开发Openfire 聊天记录插件
- 基于开源 Openfire 聊天服务器 - 开发Openfire 聊天记录插件
- 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
- 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
- 一步一步开发自己的Openfire插件(聊天记录插件)
- openfire插件开发-简单插件
- openfire插件开发-Servlet插件
- openfire插件开发-简单插件
- Openfire插件开发
- Openfire插件开发
- Openfire 插件开发记录
- 使用openfire开发插件
- openfire 开发插件
- Openfire插件开发小结
- PriorityQueue使用
- 读书笔记 《算法导论》 C3
- JavaScript获取对象中元素个数
- 24位FPD-LINK II发送器 转接IC GM8905:TTL转LVDS芯片
- 设计模式--23种模式精华(四)
- openfire插件开发-聊天记录插件
- Java简洁代码-几点原则
- Linux Makefile 静态库动态库应用实例
- mysql事务处理用法与实例详解
- Android数据库框架greenDao学习笔记 2
- Android通过反射方式强制退出应用程序
- arcgis error 000224 000372
- 二进制的运算相关
- [UVA]10474 Where is the Marble?