昨天说了怎么配置openfire的开发环境。今天写一点openfire的插件开发。我这里做了一个例子主要是针对于XMPP的通信。后边会说一点smack和openfire通信的实现。
注:这里的例子中的注释纯属个人理解。
在openfire的源码里有很多插件。我这里实际就是拷贝了其中的一个插件。重名了一下名字。目录结构如下:
貌似图片传不上来了。如果看不到图,就看看源码中的其他插件的例子。跟其他插件的目录结构是一样一样的。
在这些文件里最重要的就是plugin.xml文件。因为有这个文件openfire才认识这个插件。在这个文件里会配置插件的入口类。我这里简单写了一个plugin.xml.示例如下。
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<class>org.yangzc.testplugin.TestPlugin</class>
<name>test Plugin</name>
<description>test Plugin descript</description>
<author>yangzc</author>
<version>1.0.0</version>
<date>20/6/2011</date>
<minServerVersion>3.7.0</minServerVersion>
<databaseKey>testPlugin</databaseKey>
<databaseVersion>0</databaseVersion>
<adminconsole>
</adminconsole>
</plugin>
class部分就是插件的实现类。气的名字什么的就不用说了,根据英文基本可以猜个差不多。
具体TestPlugin的实现。这里也有一个例子:
package org.yangzc.testplugin;
import java.io.File;
import org.dom4j.Element;
import org.jivesoftware.openfire.IQHandlerInfo;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.auth.UnauthorizedException;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.handler.IQHandler;
import org.xmpp.packet.IQ;
import org.xmpp.packet.PacketError;
public class TestPlugin implements Plugin{
@Override
public void destroyPlugin() {
}
@Override
public void initializePlugin(PluginManager manager, File pluginDirectory) {
XMPPServer service = XMPPServer.getInstance();
service.getIQRouter().addHandler(new MyIQHandler());
}
class MyIQHandler extends IQHandler{
public static final String moduleName = "testPlugin";
private IQHandlerInfo info;
public MyIQHandler(){
super(moduleName);
info = new IQHandlerInfo("group", "com:im:group");//设置监听的命名空间
}
@Override
public IQHandlerInfo getInfo() {
return info;//取得指定监听命名空间的IQHandeler
}
@Override
public IQ handleIQ(IQ packet) throws UnauthorizedException {
IQ reply = IQ.createResultIQ(packet);
Element groups = packet.getChildElement();//取得客户端发送过来的xml
if (!IQ.Type.get.equals(packet.getType())){
System.out.println("非法的请求类型");
reply.setChildElement(groups.createCopy());
reply.setError(PacketError.Condition.bad_request);
return reply;
}
//String userName = StringUtils.substringBefore(packet.getFrom().toString(),"@");
//GroupManager.getInstance().initElement(groups,userName);
//reply.setChildElement(groups.createCopy());//2
//System.out.println("返回的最终XML" reply.toXML());
return reply;
}
}
}
在这个实现类中需要实现接口plugin。这个接口包含两个方法。一个是初始化插件,一个是销毁插件动作。
这个例子里在初始化插件的时候通过service添加了一个监听。这里我理解为监听。这个监听可以监听指定命名空间的消息。这个例子里代码很简单。
明天写点smack和openfire通信的例子。敬请期待...
<!--EndFragment-->
- 大小: 28.1 KB
分享到:
相关推荐
NULL 博文链接:https://beautyofprogram.iteye.com/blog/772281
NULL 博文链接:https://zfms.iteye.com/blog/1702309
openfire插件开发指南,官网原版翻译,对插件开发有一定的帮助,不错的资源。
Openfire插件开发人员指南
该资源实现了Openfire插件开发的入门,即实现了对jsp的访问和servlet的访问。主要是目录结构。哈哈,就说这些吧。
OpenFire插件开发从入门到精通,适用于移动互联聊天服务器搭建。
openfire插件开发.pdf
目的:主要是为了监控Openfire各类message,然后对message body做进一步...局限:因为时间有限,本插件并没有对Openfire message协议进行扩展,都是基于原生的xml协议,因此后续开发还需要进行更加深入的二次开发操作。
XMPP协议及其服务器端的Openfire插件开发XMPP背景知识XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。绊过扩展以后的XMPP可以通过发送扩展的信息来处理用户的...
手把手教你openfire何如插件开发
这是一个文档,内容是如何编写Openfire开发插件、部署源码
openfire插件开发(plugin sevlet)入门 了解简单示例,有助于快速开发插件。 快速方便地使用build.xml进行ant打包编译
这是为openfire服务器开发插件的简单demo,参照博客:http://blog.csdn.net/ibm_hoojo/
网上找了半天openfire插件开发的例子,都只是从原理上将的,并不利于菜鸟学习,所以我在这里从动手方面将下openfire插件的开发,此插件可以运行,使用者可以添加自定义功能。
安装openfire的详细过程,手把手的教你,
openfire3.6.3插件开发方法说明: winxp/myeclipse6.5/jdk1.5&1.6/mysql5.0/openfire3.6.3 开发步骤:1. 布署openfire3.6.3源码(请参考openfire3.6.3导入eclipse项目实现方法)
openfire编译、openfire打包、openfire开发、openfire插件开发、openfire原理说明等,全是好东东
Openfire 及插件开发 . 国内没有中文资料.我自己手写的。很珍贵。希望大家珍惜我的劳动成果