openfire插件开发

昨天说了怎么配置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-->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值