当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

openfire 插件入门学习

发表于: 2011-02-16   作者:酷的飞上天空   来源:转载   浏览:
xml
摘要: openfire 版本3.6.4 关于插件开发的基本信息,可以参考其自带的文档页plugin-dev-guide.html 中文翻译传送门http://www.360doc.com/content/10/0707/15/1332348_37445649.shtml   实现功能,客户端发送一个IQ包含内容的节给服务器,服务器取得内容,然后广播给所有的在线用户 新定义的iq为

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插件开发的开始吧

openfire 插件入门学习

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
我这里写的插件是基于openfire源码工程做的开发,不是专门开发of插件的工程。 1、到OpenFire工程下
我这里写的插件是基于openfire源码工程做的开发,不是专门开发of插件的工程。 1、到OpenFire工程下
我这里写的插件是基于openfire源码工程做的开发,不是专门开发of插件的工程。 1、到OpenFire工程下
我这里写的插件是基于openfire源码工程做的开发,不是专门开发of插件的工程。 1、到OpenFire工程下
1、 在上一篇博文中,我介绍了Openfire3.9.3源代码导入eclipse中开发配置指南后,在这篇博文中,我
近来几天为了写一个openfire的小插件可谓脑袋都大了。。。自己又是初学小菜鸟一个,学习过程算是非
在前面的博客中,我介绍了openfire插件开发,在那篇博客中我详细的说明怎样开发一个基于控制台的插
1、首先建一个SampleServlet类,(名字随意。)继承 HttpServlet package com.maojd.test; import j
方法一: openfire默认编译时,是同时编译主程序和所有在plugins目录中的插件。但进行插件开发时,这
参考资料:http://strophe.im/strophejs/ https://github.com/strophe/strophejs-plugins http://am
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号