【openfire,smack使用总结】--openfire插件开发
2017-03-04 18:29
399 查看
文章源地址:http://blog.csdn.net/e_one/article/details/60336159,转载请注明出处
1.源码的配置
到https://github.com/igniterealtime/Openfire/releases去下载openfire的源码,导入eclipse,openfire需要Ant工具进行编译,所以还要装上Ant。2.插件目录结构
装好后,在eclipse的openfire源码目录的plugins目录下创建一个插件文件结构,文件结构见下图,注意图中圈起来的地方。RandomUser是我们要开发的插件目录。3. plugin.xml文件的规则
plugin.xml文件是插件的描述文件,必不可少。在这个文件中定义了插件的一些信息。我们来看一下plugins.xml文件的结构。
<?xml version="1.0"encoding="UTF-8"?> <plugin> <!-- 制定类--> <class>com.woc.chat.plugin.MatchUser.MatchUserPlugin</class> <!-- Plugin meta-data --> <name>MatchUserPlugin</name> <description>随机匹配聊天的插件.</description> <author>zyw</author> <version>1.0</version> <date>20/01/2017</date> <minServerVersion>3.4.1</minServerVersion> <licenseType>gpl</licenseType> <adminconsole> </adminconsole> </plugin>
这是一个标准的xml的文件。
pluagin标签:是文档的主标签
class标签:指明插件入口类所在位置,和上面的文件结构对应
name标签:指定插件的名称
description标签:插件的描述
author标签:插件的作者
version标签:插件的版本
date标签:插件的版本
minServerVersion标签:运行此插件需要的最低的openfire服务器的版本
4.插件周期的管理
周期指的是当插件被openfire服务器加载,或者被停止的时候。我们将将我们的MatchUserPlugin类实现Plugin接口,MatchUserPlugin类在plugin.xml里定义过它的路径,没错,就是它!private final Logger Log = LoggerFactory.getLogger(MatchUserPlugin.class); public class MatchUserPlugin implements Plugin { @Override public void destroyPlugin() { // TODOAuto-generated method stub Log.info("------------------->MatchUserPlugindestroy!"); } @Override public void initializePlugin(PluginManager pluginManager, Filefile) { // TODOAuto-generated method stub Log.info("------------------->MatchUserPlugininitialize!"); } }
initializePlugin函数是当插件被加载的时候被调用的函数,destroyPlugin是当插件被停止的时候被调用的函数。
注:在Openfire调用打印函数,openfire插件的打印的日志信息可以在操作后台查看。
5.处理经过服务器的数据包
数据包在Openfire中被称为IQ.现在我们看看怎么处理进入服务器的IQ包。1. 往IQRouter里添加操作类。
try { IQRouter iqRouter =XMPPServer.getInstance().getIQRouter(); iqRouter.addHandler(new MyIQHandler("MyIQHandler")); } catch (Exceptione) { // TODO: handle exception Log.info("------------------->BindException:"+e.toString()); }
2. 编写MyIQHandler类,MyIQHandler类继承IQHandler类,在MyIQHandler类里的handleIQ函数里操作数据包。
private class MyIQHandler extends IQHandler{ private IQHandlerInfoinfo; @Override public void initialize(XMPPServer server) { // TODO Auto-generated method stub super.initialize(server); } public MyIQHandler(StringmoduleName) { super(moduleName); // TODO Auto-generated constructor stub info=new IQHandlerInfo("info",NAMESPACE_INFO); } @Override public IQHandlerInfo getInfo() { // TODO Auto-generated method stub returninfo; } @Override public IQ handleIQ(IQpacket)throws UnauthorizedException { // TODO Auto-generated method stub String childName=packet.getChildElement().getName(); IQ replyIQ=IQ.createResultIQ(packet); returnreplyIQ; } }//MyIQHandler
handleIQ函数有一个函数,这个函数有一个参数,IQ类型的,IQ类在Openfire中是数据包的封装类,这个参数传进来的IQ是客户端发来的IQ,而方法返回的IQ是返回给客户端的IQ.
6.IQ包的结构
其实,要想直观的看到IQ的结构,直接调用toXML方法并打印出来就行了,IQ包的结构大概如下:<iqtype="get" id="TeUQc-12" from="zyw8@localhost/Smack" to=" localhost/MatchUserPlugin "/>
type字段:iq包的类型,可以为set,get,result,error。
set:set请求
get:相当于http的get请求
result:服务端返回结果,在handleIQ函数里,可以通过
IQ replyIQ=createResultIQ(packet);
得到type为result的包。并加以修改,最后返回给客户端。
error:当请求为错误时。
id字段:包的id,由smack或者openfire生成
from字段:包的来源
to字段:包要发往的目的
7.编译Openfire源码
所有的工作完成后,我们就可以编译源码了选中plugins右键,Run As->AntBuild
如果没问题,稍等片刻就可以编译完成,编译完成后就可以在{openfire源码目录}\target\openfire\plugins下找到我们的Jar包
把jar包放进{Openfire服务器安装目录}/plugins/下,服务器就会自动安装插件。插件运行成功,我们可以在控制台看到日志。
文章源地址:http://blog.csdn.net/e_one/article/details/60336159,转载请注明出处
相关文章推荐
- 基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用
- 基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
- Unity 开发总结之VLC Player for Unity插件的使用
- 基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用
- 基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用
- 基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用
- 基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用
- 【openfire,smack使用总结】--openfire环境搭建
- Android中so使用知识和问题总结以及插件开发过程中加载so的方案解析
- highcharts插件使用总结和开发中遇到的问题及解决办法
- 开发工具使用技巧和插件大总结
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
- 基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用
- openfire常见几类插件开发研究与总结
- 混合开发项目总结一 (cordova插件的定义和使用)
- Android中so使用知识和问题总结以及插件开发过程中加载so的方案解析
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
- 基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用
- myeclipse2015中使用默认插件实现协同开发总结