`
酷的飞上天空
  • 浏览: 517884 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

openfire 插件入门学习

XML 
阅读更多

openfire 版本3.6.4

关于插件开发的基本信息,可以参考其自带的文档页plugin-dev-guide.html

中文翻译传送门http://www.360doc.com/content/10/0707/15/1332348_37445649.shtml

 

实现功能,客户端发送一个IQ包含内容的节给服务器,服务器取得内容,然后广播给所有的在线用户

新定义的iq为<iq id="xxx" type="set"><b xmlns="com:message:broadcasts">输入发言内容</b></iq>

服务器端:
建立org.jivesoftware.openfire.handler.IQHandler的实现类
package test.plugin;

import org.dom4j.Element;
import org.jivesoftware.openfire.IQHandlerInfo;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.auth.UnauthorizedException;
import org.jivesoftware.openfire.handler.IQHandler;
import org.xmpp.packet.IQ;

public class BroadcastsIQ extends IQHandler {

	private IQHandlerInfo info;
	public BroadcastsIQ() {
		super("用户广播模块");
		info = new IQHandlerInfo("b", "com:message:broadcasts");
	}

	@Override
	public IQHandlerInfo getInfo() {
		return info;
	}

	@Override
	public IQ handleIQ(IQ packet) throws UnauthorizedException {
        Element iq = packet.getElement();
        Element b = iq.element("b");
        String text = b.getText();
		XMPPServer.getInstance().getSessionManager().sendServerMessage(null, text);//广播信息 
		return null;
	}
	
}

建立org.jivesoftware.openfire.container.Plugin的实现类
package test.plugin;

import java.io.File;
import java.util.List;

import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.handler.IQHandler;

public class MyPlugin implements Plugin {

	private IQHandler iQHandler;
	@Override
	public void destroyPlugin() {
		XMPPServer.getInstance().getIQRouter().removeHandler(iQHandler);
		System.out.println("插件停止成功");
	}

	@Override
	public void initializePlugin(PluginManager manager, File pluginDirectory) {
		iQHandler = new BroadcastsIQ();
		XMPPServer.getInstance().getIQRouter().addHandler(iQHandler);
		System.out.println("插件运行成功");
	}
}

建立plugin.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <class>test.plugin.MyPlugin</class>
    <name>Broadcasts messages</name>
    <description>This is an Broadcasts messages plugin.</description>
    <author>me</author>

    <version>1.0</version>
    <date>01/01/2011/date>
    <url>none</url>
    <minServerVersion>3.0.0</minServerVersion>
    <licenseType>gpl</licenseType>
    <adminconsole>
    </adminconsole>
</plugin>

打包为任意名称的jar文件
结构如下
test.jar
--classes
  --test 
    --plugin
      --BroadcastsIQ.class
      --MyPlugin.class
--META-INF
  --MANIFEST.MF
--plugin.xml



然后把打好包的jar文件放到openfire的plugins目录下,openfire会自动加载,观察控制台是否输出 插件运行成功


客户端:
建立org.jivesoftware.smack.packet.IQ的实现类
package test.xmpp;

import org.jivesoftware.smack.packet.IQ;

public class Broadcasts extends IQ {

	private String body;
	public String getElementName() {
		return "b";
	}

	public String getNamespace() {
		return "com:message:broadcasts";
	}

	public void setBody(String body) {
		this.body = body;
	}

	public String getBody() {
		return body;
	}

	@Override
	public String getChildElementXML() {
		if(getBody() == null){
			throw new RuntimeException("Broadcasts body is empty");
		}
		StringBuilder sb = new StringBuilder();
		sb.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append("\">").append(getBody()).append("</").append(getElementName()).append(">");
		return sb.toString();
	}

}

然后在程序中

Broadcasts b = new Broadcasts();
b.setBody("测试广播内容");
b.setType(IQ.Type.SET);
conn.sendPacket(b);

实现功能比较简单,算是学习openfire插件开发的开始吧
分享到:
评论
4 楼 huangqinqiang 2014-08-05  
    
3 楼 wll52 2013-11-25  
linux上不支持这种写法怎么办?

public void initializePlugin(PluginManager manager, File pluginDirectory) { 
        System.out.println("Hellow Openfire!"); 
    } 
2 楼 moyanpeng 2013-10-11  
以前找了很久这个,原来这么的简单
1 楼 南部肥肠干饭 2011-09-08  
赞一个
学习了、、、

相关推荐

    openfire 插件简单示例

    openfire插件开发(plugin sevlet)入门 了解简单示例,有助于快速开发插件。 快速方便地使用build.xml进行ant打包编译

    OpenFire插件开发从入门到精通

    OpenFire插件开发从入门到精通,适用于移动互联聊天服务器搭建。

    Openfire插件开发 访问jsp servlet

    该资源实现了Openfire插件开发的入门,即实现了对jsp的访问和servlet的访问。主要是目录结构。哈哈,就说这些吧。

    第一个openfire插件源码及说明

    描述了第一个插件的开发,适合初学者入门介绍

    openfire即时通信入门资料

    openfire即时通信入门学习资料,openfire是一款java语言开源的即时通信框架,方便扩展,算是比较成熟稳定的即时通信框架,插件也很多,方便框架

    openfire全服推送(批量推送)插件

    openfire全服在线用户推送插件,离线用户不会收到推送消息,当然也可以在代码的基础上稍作修改就变成一个批量推送插件

    openfire开发资料

    目前在网上能找到的最详细的openfire开发资料,包括基于eclipse的开发基础,openfire数据库结构及表的详细说明。openfire插件开发基础。

    openfire_dev:此组件包含我们自定义身份验证所需的 openfire 补丁

    Openfire补丁该组件包含我们自定义身份验证所需的 openfire 补丁。入门克隆这个 repo git clone git@github.com:onlychoice/openfire_dev.git应用补丁,并将插件添加到 openfire。

    apache-apollo-1.7.1-windows-distro

    Apache Apollo是一个代理服务器,其是在ActiveMQ基础上发展而来的,可以支持STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets 等多种协议。 Apollo允许客户端通过开放的MQTT协议连接。该协议主要是用在资源有限的...

    apache_apollo_1.7.1.zip

    Apache Apollo是一个代理服务器,其是在ActiveMQ基础上发展而来的,可以支持STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets 等多种协议。 Apollo允许客户端通过开放的MQTT协议连接。该协议主要是用在资源有限的...

    如意通 RooyeeMessenger 企业即时通讯 Delphi源代码

    如意通是深圳如意通科技有限公司历时三年开发的,为企业量身打造的即时通讯软件,以文字、文件、语音、视频、远程控制为通讯基础,融合电子邮件、短信收发、网络电话、网络传真、电话会议、视频会议、网络虚拟办公室...

    Android聊天项目D3Xmpp.zip

    D3Xmpp 是一个完整的 XMPP 的 Android 的项目服务端使用 openfire 3.9.3客户端使用 ...PS:该项目是本人在学习xmpp过程中总结的一些东西,代码组织凌乱,旨在帮助新入门xmpp学习xmpp的基本使用 标签:D3Xmpp

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics