(三)Openfire插件开发

2024-06-11 02:18
文章标签 开发 openfire 插件

本文主要是介绍(三)Openfire插件开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

此部分是Openfire的第三大部分,本部分的开发必须基于前两部分

本文档基于消息拦截器插件功能进行开发。

新建插件messageFilter:

  1. 在openfire插件源码的plugins目录下新建文件夹messageFilter
  2. messageFilter文件夹下新建lib和src文件夹。lib包下放jar包,src文件夹下放要开发的插件源码。
  3. 将changelog.html、logo_large.gif、logo_small.gif、plugin.xml、pom.xml、readme.html在其他的插件中复制到messageFilter目录下
  4. src文件夹下新建文件夹java并右键选择Mark Directory as-→Sources root
  5. java目录下新建Package  com.weishuai
  6. com.weishuai下新建类MessageFilter并实现Plugin和PacketInterceptor接口
  7. 修改plugin.xml,主要是class标签的内容为插件类的权限定名。如下图:

此时我们的插件结构如下图所示

代码如下:

fromid为发信息的id,可以通过断点的而形式在packet的message标签中from属性获取,同理获得toid 

public class DemoPlugin implements Plugin, PacketInterceptor {//B: 消息拦截器private InterceptorManager interceptorManager;@Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) {// 将当前插件加入到消息拦截管理器(interceptorManager )中,当消息到来或者发送出去的时候,会触发本插件的interceptPacket方法。interceptorManager = InterceptorManager.getInstance();interceptorManager.addInterceptor(this);}@Overridepublic void destroyPlugin() {// 当插件被卸载的时候,主要通过openfire管理控制台卸载插件时,被调用。注意interceptorManager的addInterceptor和removeInterceptor需要成对调用。interceptorManager.removeInterceptor(this);}@Overridepublic void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) throws PacketRejectedException {//入参incoming来判断是服务器发送的包还是接受的包(注:true为服务器接收的包;false为发出的包);// processed为false,表示本条消息没有被openfire处理过。这说明这是一条处女消息,也就是没有被处理过的消息。String strXML = packet.toXML();Document doc = null;try {doc = DocumentHelper.parseText(strXML);} catch (DocumentException e) {e.printStackTrace();}//1.1读取根标签Element rootElem = doc.getRootElement();//1.2获取标签的名称String rootName = rootElem.getName();
//        Element conElem = rootElem.element("contact");// 1.1 在标签上获取属性(根据属性的名称来获取属性值)String fromid = rootElem.attributeValue("from");String toid = rootElem.attributeValue("to");if (incoming && !processed) {if (packet instanceof Message) {if (fromid.equals("test@desktop-r4sp4pf/Spark")) {PacketRejectedException rejectedException = new PacketRejectedException();
//                        rejectedException.setRejectionMessage("the friend already in black.");throw rejectedException;}}}}
}

 

打包插件

如图所示,右侧ant中双击plugins。等程序运行完毕,jar包就在openfire源码包下的openfire_src\target\openfire\plugins文件夹里。

此时启动openfire服务器,在插件中打上断点即可以进入断点。

通过spark发送消息,可以进入消息拦截器方法中。

 

 

 

 

 

 

 

 

 

 

 

这篇关于(三)Openfire插件开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049930

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof