openfire插件开发三,java端开发

原创 2012年04月14日 11:46:20

也就是服务器端的开发,扩展的协议,需要在服务器端处理。比如送礼物的协议,需要保存用户发送礼物的记录,并且判断用户是否有足够的礼物发送。部分代码记录如下。

  1. 扩展IQHandler的模板
    package com.xxxx.openfire.handler;
    
    
    
    import java.awt.TrayIcon.MessageType;
    
    import org.jivesoftware.openfire.IQHandlerInfo;
    import org.jivesoftware.openfire.PacketException;
    import org.jivesoftware.openfire.XMPPServer;
    import org.jivesoftware.openfire.auth.UnauthorizedException;
    import org.jivesoftware.openfire.handler.IQHandler;
    import org.jivesoftware.openfire.muc.ForbiddenException;
    import org.jivesoftware.openfire.muc.MUCRole;
    import org.jivesoftware.openfire.muc.MUCRoom;
    import org.jivesoftware.openfire.muc.MultiUserChatService;
    import org.jivesoftware.openfire.user.UserNotFoundException;
    import org.xmpp.packet.IQ;
    import org.xmpp.packet.IQ.Type;
    import org.xmpp.packet.JID;
    import org.xmpp.packet.Message;
    import org.xmpp.packet.PacketError;
    import org.xmpp.packet.PacketExtension;
    
    
    import com.rayclear.openfire.database.DataManager;
    
    import de.javawi.jstun.attribute.MessageAttributeInterface.MessageAttributeType;
    
    public class XXXXHandler extends IQHandler {
    	private IQHandlerInfo info;
    
    	private static final String MODULE_NAME = "xxx handler";
    
    	private static final String NAME_SPACE = "xxx:xxxx:gift";
    
    	public RayclearHandler(String moduleName) {
    		super(MODULE_NAME);
    		info = new IQHandlerInfo("query", NAME_SPACE);
    	}
    
    	@Override
    	public IQ handleIQ(IQ packet) throws UnauthorizedException {
    		return reply;
    	}
    
    	@Override
    	public IQHandlerInfo getInfo() {
    		return info;
    	}
    
    }
    


  2. 在route里注册
    IQHandler myHandler = new xxxxHandler("xxxx");
    		IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();
    		iqRouter.addHandler(myHandler);
    注册到route链里,就可以 抓取与命名空间匹配的packet了

  3. 取得请求的iq节点
    		Element groups = packet.getChildElement();
    		
    		Element childElement = packet.getChildElement();
            String namespace = childElement.getNamespaceURI();
    
        Element childElementCopy = packet.getChildElement().createCopy();
            
            final String toUser = groups.elementText("host").split("@")[0]
    
    
    packet可以取得来自与请求的element元素

  4. 设置返回的节点
    IQ reply = IQ.createResultIQ(packet);
    reply.setType(IQ.Type.error);
    			Element reason = DocumentHelper.createElement("reason");
    			reason.addNamespace("", NAME_SPACE);
    			reason.setText("no");
    			reply.setChildElement(reason);
    由请求方的packet生成回复的packet-

  5. 处理请求后,将消息发送到房间
    String roomjid = "song@conference.192.168.1.126";
    		JID rJid = new JID(roomjid);
    		MultiUserChatService chatService =
                    XMPPServer.getInstance().getMultiUserChatManager().getMultiUserChatService(rJid);
    		MUCRoom room = chatService.getChatRoom(rJid.getNode());
    		//room.send(reply);
    		org.xmpp.packet.Message  message = new org.xmpp.packet.Message();
    		message.setTo(roomjid);
    		message.setBody("给张飞送花了哦,数量共一朵~");
    		message.setType(Message.Type.groupchat);
    		MUCRole senderRole;
    		try {
    			senderRole = room.getOccupant("tester001");
    			room.sendPublicMessage(message, senderRole);
    		} catch (UserNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ForbiddenException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    MultiUserChatService :  群组聊天服务,有一系列的服务方法
    MUCRoom:  房间类,有取的房间信息和向房间发送消息的方法
    MUCRole: 用户角色,发送消息等需要
    
    
  6. 如何遍历房间中的所有用户,并使用他们发送消息?
    if (room != null) { //改方法,是每个人都发一条信息,显然不行
    	    	for (MUCRole role : room.getOccupants()) {
    	    		try {
    					room.sendPublicMessage(message, role);
    				} catch (ForbiddenException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    	    	}
    	    }



openfire_插件开发-jsp/servlet

1.openfire编译运行正常,helloworld工作。参见:openfire_插件开发-helloworld 2.openfire_src/src/plugins/xhcplugin/src/增...
  • u013025459
  • u013025459
  • 2014年03月05日 18:48
  • 1305

(4)-openfire-IntelliJ IDEA插件环境搭建

openfire-IntelliJ IDEA插件环境搭建
  • QXC1281
  • QXC1281
  • 2017年03月31日 22:03
  • 823

基于openfire+smack的Android、Web、PC开发

前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack。当然也有其他的选择。 Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本...
  • kaizi318
  • kaizi318
  • 2016年08月30日 17:51
  • 4067

openfire插件开发(plugin sevlet)入门

近来几天为了写一个openfire的小插件可谓脑袋都大了。。。自己又是出血
  • u011254308
  • u011254308
  • 2014年05月13日 21:50
  • 2321

Openfire插件开发实例

目的:主要是为了监控Openfire各类message,然后对message body做进一步扩展,让Openfire更适合当前的业务需求。 局限:因为时间有限,本插件并没有对Openfire mes...
  • qiu_11
  • qiu_11
  • 2016年12月23日 11:15
  • 744

openfire_插件开发-helloworld

1.openfire编译运行正常,参见:http://blog.csdn.net/xhcbird/article/details/20458449 2.插件开发,帮助文档很详细,在openfire_s...
  • u013025459
  • u013025459
  • 2014年03月04日 15:08
  • 1113

OpenFire源码学习之十五:插件开发

Plugin接口规范 插件是openfire功能的增强表现,它的主要任务: l  在XMPP协议中作为附加功能实现 l  动态修改控制管理台 l  使用openfire api作为新功能添加到...
  • huwenfeng_2011
  • huwenfeng_2011
  • 2015年02月02日 22:28
  • 6208

一天时间用OpenFire打造自己的IM聊天工具

Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。 ...
  • lh15871815717
  • lh15871815717
  • 2015年01月07日 13:15
  • 9947

【插件开发三】开发继承IQHandler的插件

OF的插件开发有四种方式,下面讲述如何Register a plugin as an IQHandler。IQ handlers相应包中特定的元素名或命名空间。继承IQHandler的插件,需要注册到...
  • majian_1987
  • majian_1987
  • 2013年08月07日 10:09
  • 4111

Openfire安装部署及插件的开发

先说明本人菜鸟一枚,这是我的第一篇博客,记录下我今天辛苦了一天的成果吧,Openfire的安装部署及插件的开发,因为一个小项目的需求需要接触到openfire,网上资料也挺多,但就是太多了,没有一篇,...
  • fOrLOveDoit
  • fOrLOveDoit
  • 2016年04月21日 23:18
  • 1052
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openfire插件开发三,java端开发
举报原因:
原因补充:

(最多只允许输入30个字)