openfire插件开发三,java端开发
来源:互联网 发布:iphone进水数据恢复 编辑:程序博客网 时间:2024/06/05 04:03
也就是服务器端的开发,扩展的协议,需要在服务器端处理。比如送礼物的协议,需要保存用户发送礼物的记录,并且判断用户是否有足够的礼物发送。部分代码记录如下。
- 扩展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);}@Overridepublic IQ handleIQ(IQ packet) throws UnauthorizedException {return reply;}@Overridepublic IQHandlerInfo getInfo() {return info;}}
- 在route里注册
IQHandler myHandler = new xxxxHandler("xxxx");IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();iqRouter.addHandler(myHandler);
注册到route链里,就可以 抓取与命名空间匹配的packet了 - 取得请求的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元素 - 设置返回的节点
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- - 处理请求后,将消息发送到房间
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 blocke.printStackTrace();} catch (ForbiddenException e) {// TODO Auto-generated catch blocke.printStackTrace();}
MultiUserChatService : 群组聊天服务,有一系列的服务方法MUCRoom: 房间类,有取的房间信息和向房间发送消息的方法MUCRole: 用户角色,发送消息等需要
- 如何遍历房间中的所有用户,并使用他们发送消息?
if (room != null) { //改方法,是每个人都发一条信息,显然不行 for (MUCRole role : room.getOccupants()) { try {room.sendPublicMessage(message, role);} catch (ForbiddenException e) {// TODO Auto-generated catch blocke.printStackTrace();} } }
- openfire插件开发三,java端开发
- openfire开发笔记三-openfire主要插件介绍
- Openfire插件开发
- Openfire插件开发
- Openfire 插件开发记录
- 使用openfire开发插件
- openfire 开发插件
- Openfire插件开发小结
- openfire 插件开发一
- openfire插件开发全过程
- 开发Openfire聊天记录插件
- Android openfire插件开发
- OpenFire插件开发笔记
- openfire 插件开发 打包
- openfire插件开发简介
- Openfire插件开发
- openfire 插件开发入门
- openfire插件 servlet开发
- 在OpenGL和GLSL之间传递变量
- Apache Shiro 介绍
- android开发源码下载
- 【Html5每日练习】canvas绘制坐标变换图形
- 二进制格雷码与自然二进制码的互换
- openfire插件开发三,java端开发
- 几种常见浏览器内核简介
- 打开ubuntu的终端方法
- XAF之操作ApplicationModel的有用代码片段
- 如果改变erlang的当前工作路径
- Web自动化测试中针对图片验证码问题的常见解决思路
- Qt之QTcpServer/QTcpSocket简单收发信息(2)
- J2ME 拼图游戏 快速开发 全过程 (一)——开发环境及游戏菜单
- AVD 无法启动