openfire 版本3.6.4
关于插件开发的基本信息,可以参考其自带的文档页plugin-dev-guide.html
中文翻译传送门http://www.360doc.com/content/10/0707/15/1332348_37445649.shtml
- 实现功能,客户端发送一个IQ包含内容的节给服务器,服务器取得内容,然后广播给所有的在线用户
- 新定义的iq为<iqid="xxx"type="set"><bxmlns="com:message:broadcasts">输入发言内容</b></iq>
- 服务器端:
- 建立org.jivesoftware.openfire.handler.IQHandler的实现类
- packagetest.plugin;
- importorg.dom4j.Element;
- importorg.jivesoftware.openfire.IQHandlerInfo;
- importorg.jivesoftware.openfire.XMPPServer;
- importorg.jivesoftware.openfire.auth.UnauthorizedException;
- importorg.jivesoftware.openfire.handler.IQHandler;
- importorg.xmpp.packet.IQ;
- publicclassBroadcastsIQextendsIQHandler{
- privateIQHandlerInfoinfo;
- publicBroadcastsIQ(){
- super("用户广播模块");
- info=newIQHandlerInfo("b","com:message:broadcasts");
- }
- @Override
- publicIQHandlerInfogetInfo(){
- returninfo;
- }
- @Override
- publicIQhandleIQ(IQpacket)throwsUnauthorizedException{
- Elementiq=packet.getElement();
- Elementb=iq.element("b");
- Stringtext=b.getText();
- XMPPServer.getInstance().getSessionManager().sendServerMessage(null,text);//广播信息
- returnnull;
- }
- }
- 建立org.jivesoftware.openfire.container.Plugin的实现类
- packagetest.plugin;
- importjava.io.File;
- importjava.util.List;
- importorg.jivesoftware.openfire.XMPPServer;
- importorg.jivesoftware.openfire.container.Plugin;
- importorg.jivesoftware.openfire.container.PluginManager;
- importorg.jivesoftware.openfire.handler.IQHandler;
- publicclassMyPluginimplementsPlugin{
- privateIQHandleriQHandler;
- @Override
- publicvoiddestroyPlugin(){
- XMPPServer.getInstance().getIQRouter().removeHandler(iQHandler);
- System.out.println("插件停止成功");
- }
- @Override
- publicvoidinitializePlugin(PluginManagermanager,FilepluginDirectory){
- iQHandler=newBroadcastsIQ();
- XMPPServer.getInstance().getIQRouter().addHandler(iQHandler);
- System.out.println("插件运行成功");
- }
- }
- 建立plugin.xml文件
- <?xmlversion="1.0"encoding="UTF-8"?>
- <plugin>
- <class>test.plugin.MyPlugin</class>
- <name>Broadcastsmessages</name>
- <description>ThisisanBroadcastsmessagesplugin.</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的实现类
- packagetest.xmpp;
- importorg.jivesoftware.smack.packet.IQ;
- publicclassBroadcastsextendsIQ{
- privateStringbody;
- publicStringgetElementName(){
- return"b";
- }
- publicStringgetNamespace(){
- return"com:message:broadcasts";
- }
- publicvoidsetBody(Stringbody){
- this.body=body;
- }
- publicStringgetBody(){
- returnbody;
- }
- @Override
- publicStringgetChildElementXML(){
- if(getBody()==null){
- thrownewRuntimeException("Broadcastsbodyisempty");
- }
- StringBuildersb=newStringBuilder();
- sb.append("<").append(getElementName()).append("xmlns=\"").append(getNamespace()).append("\">").append(getBody()).append("</").append(getElementName()).append(">");
- returnsb.toString();
- }
- }
- 然后在程序中
- Broadcastsb=newBroadcasts();
- b.setBody("测试广播内容");
- b.setType(IQ.Type.SET);
- conn.sendPacket(b);