【插件开发三】开发继承IQHandler的插件
来源:互联网 发布:linux 查看命令行历史 编辑:程序博客网 时间:2024/05/16 08:00
OF的插件开发有三种方式,关于如何开发OF的插件,请参考别的文章,本文就不具体描述了。下面讲述如何Register a plugin as anIQHandler。
我们如果要做自己的IQ包处理,可以自定义类如TestTemplateMethodHandler:class TestTemplateMethodHandler extends IQHandler。
以下需要注意:
1.IQ handlers相应包中特定的元素名或命名空间,在public IQHandlerInfo getInfo()方法中写上自己想要注册的元素名及命名空间,
2.在public IQ handlerIQ(IQ packet)方法中写上自己想要对丢进来的IQ包做什么样的处理(注意IQ包是基于问答形式的,所以应该有IQ包的reply)。
3.继承IQHandler的插件,需要注册到IQRouter中去。
以下是注册一个继承IQHandler的插件到IQRouter中的代码:
IQHandler myHandler = new MyIQHander();IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();iqRouter.addHandler(myHandler);
接下来就是展示具体的实现继承IQHandler的插件两种方式:(区别主要是在把IQHandler的继承类和插件是否绑定在一起)
1.注册继承IQHandler的插件到IQrouter可以在这个插件初始化的时候:
package com.bis.plugins.iqhandler;import java.io.File;import org.jivesoftware.openfire.IQHandlerInfo;import org.jivesoftware.openfire.IQRouter;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;public class MyIQHandler extends IQHandler implements Plugin{private IQHandlerInfo info;public MyIQHandler() {super("MyIQHandler");info = new IQHandlerInfo("query", "jabber:iq:roster");}@Overridepublic IQHandlerInfo getInfo() {// TODO Auto-generated method stubreturn info;}@Overridepublic IQ handleIQ(IQ packet) throws UnauthorizedException {// TODO Auto-generated method stubIQ reply = IQ.createResultIQ(packet);System.out.println("【iq from】:" + reply.getFrom());System.out.println("【iq to】:" + reply.getTo());return reply;}@Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) {IQRouter iqRouter = XMPPServer.getInstance().getIQRouter(); iqRouter.addHandler(this); System.out.println("==init myIQHandler==");}@Overridepublic void destroyPlugin() {// TODO Auto-generated method stub}}
或者,单独写一个IQHandler的实现类,再单独写一个插件专门用于把所有扩展的IQHandler继承类注册到IQRouter中:
IQHandler的继承类:
public class GroupTreeIQHander extends IQHandler{ private static final String MODULE_NAME = "group tree handler"; private static final String NAME_SPACE = "com:im:group"; private IQHandlerInfo info; public GroupTreeIQHander() { super(MODULE_NAME); info = new IQHandlerInfo("gruops", NAME_SPACE); } /* * (non-Javadoc) * * @see org.jivesoftware.openfire.handler.IQHandler#getInfo() */ @Override public IQHandlerInfo getInfo() { return info; } /* * (non-Javadoc) * * @see org.jivesoftware.openfire.handler.IQHandler#handleIQ(org.xmpp.packet.IQ) */ @Override public IQ handleIQ(IQ packet) throws UnauthorizedException { IQ reply = IQ.createResultIQ(packet); Element groups = packet.getChildElement();//1 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; }}
再写一个插件,用于把扩展的IQHandler继承类注册到IQRouter中:
/** * 服务器端插件类 * * @author Phoenix * * Mar 14, 2008 11:03:11 AM * * version 0.1 */public class GroupTreePlugin implements Plugin{ private XMPPServer server; /* * (non-Javadoc) * * @see org.jivesoftware.openfire.container.Plugin#destroyPlugin() */ public void destroyPlugin() { } /* * (non-Javadoc) * * @see org.jivesoftware.openfire.container.Plugin#initializePlugin(org.jivesoftware.openfire.container.PluginManager, * java.io.File) */ public void initializePlugin(PluginManager manager, File pluginDirectory) { PluginLog.trace("注册群组树IQ处理器"); server = XMPPServer.getInstance(); server.getIQRouter().addHandler(new GroupTreeIQHander()); //1 server.getIQRouter().addHandler(new UserInfoIQHandler()); server.getIQRouter().addHandler(new DelUserIQHandler()); server.getIQRouter().addHandler(new CreateUserIQHandler()); server.getIQRouter().addHandler(new AddGroupUserIQHandler()); server.getIQRouter().addHandler(new SetRoleIQHandler()); }}
- 【插件开发三】开发继承IQHandler的插件
- Eclipse插件开发(三)插件的代码开发
- openfire插件最佳实践(二)基于IQHandler 的Smack+openfire插件
- 开发自己的Maven插件之三:使用插件
- PhoneGap插件开发---基于百度LBS的导航插件(三)
- magento -- 开发必备插件三
- CodeBlocks插件开发指南(三)
- jQuery :插件开发(三)
- Atom插件开发入门教程(三)
- openfire插件开发三,java端开发
- c# 的插件开发
- C#的插件开发
- 插件开发的好处
- C#的插件开发
- 开发EditPlus的“插件
- jQuery插件的开发
- jQuery插件的开发
- jquery插件的开发
- poj1942
- QTP 小技巧
- CRM上线之路 走上了CRM实施顾问-第十天上班 -第三周
- Android 自定义类库打包jar!
- dbunit处理auto_increment数据问题
- 【插件开发三】开发继承IQHandler的插件
- sqlserver链接服务器使用方法 这里讲oracle的
- html基础
- WebService从零到项目开发使用1—技术研究之基础篇 WSDL
- solaris常用系统命令
- POJ 2115 C Looooops 解题报告(模线性方程)
- rcp(插件开发)rcp里面绘制plot图or柱形图
- WebService从零到项目开发使用2—技术研究之Axis2
- 设计模式之:Adapter适配器模式