简单插件开发已经讲解了简单的openfire插件怎样制作,本篇将会讲解如何实现一个简单的和客户端交互的插件。

首先我们要知道,openfire 的四种常用的插件集成方式:

(1)Component:可以接收一个特定子域(sub-domain)的所有包。比如test_componet.hoo.com。所以一个发送给jojo@test_componet.hoo.com的包将被转发给这个componet.

(2)IQHandler:相应包中特定的元素名或命名空间。下面的代码展示了如何注册一个IQHandler.

IQHandlermyHandler = new MyIQHander();

IQRouteriqRouter = XMPPServer.getInstance().getIQRouter();

iqRouter.addHandler(myHandler);

(3)PacketInterceptor:这种方式可以接收系统传输的所有包,并可以随意的丢弃它们。例如,一个interceptor可以拦截并丢弃所有含有不健康信息的消息,或者将它们报告给系统管理员。

(4)使用JiveGlobals.getProperty(String)和 JiveGlobals.setProperty(String, String)方法将我们的插件设置为openfire的一个全局属性。通过实现org.jivesoftware.util.PropertyEventListener方法可以将我们的插件做成一个属性监听器监听任何属性的变化。通过PropertyEventDispatcher.addListener(PropertyEventListener)方法可以注册监听。要注意的一点是,一定要在destroyPlugin()方法中将注册的监听注销。

本篇文章将会主要使用IQHandler来实现openfire插件,有关使用PacketInterceptor实现可以参考文章:

http://www.cnblogs.com/hoojo/archive/2013/03/29/2988437.html

(一)确定客户端和服务器端进行通讯的IQ的样式

iq类型有四种:get、set、error、result。

这里我们主要讨论get类型,其余类型的处理方式类似。

我们设计的客户端请求格式如下:

<iq id=”H40yo-4” type=”get”from=”test@yourhost/Smack”>

111

服务器端返回格式如下:

<iq type=”result” id=”VKe0a-4”to=”test@yourhost/Smack”>

111

(二)编写继承IQHandler的类,用于拦截来自客户端的IQ请求:

文档更新时间: 2020-02-04 12:57   作者:Jeebiz