openfire插件入门学习

时间:2023-01-27 14:44:28

openfire 版本3.6.4

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

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

 

Java代码   openfire插件入门学习
  1. 实现功能,客户端发送一个IQ包含内容的节给服务器,服务器取得内容,然后广播给所有的在线用户  
  2.   
  3. 新定义的iq为<iq id="xxx" type="set"><b xmlns="com:message:broadcasts">输入发言内容</b></iq>  
  4.   
  5. 服务器端:  
  6. 建立org.jivesoftware.openfire.handler.IQHandler的实现类  
  7. package test.plugin;  
  8.   
  9. import org.dom4j.Element;  
  10. import org.jivesoftware.openfire.IQHandlerInfo;  
  11. import org.jivesoftware.openfire.XMPPServer;  
  12. import org.jivesoftware.openfire.auth.UnauthorizedException;  
  13. import org.jivesoftware.openfire.handler.IQHandler;  
  14. import org.xmpp.packet.IQ;  
  15.   
  16. public class BroadcastsIQ extends IQHandler {  
  17.   
  18.     private IQHandlerInfo info;  
  19.     public BroadcastsIQ() {  
  20.         super("用户广播模块");  
  21.         info = new IQHandlerInfo("b""com:message:broadcasts");  
  22.     }  
  23.   
  24.     @Override  
  25.     public IQHandlerInfo getInfo() {  
  26.         return info;  
  27.     }  
  28.   
  29.     @Override  
  30.     public IQ handleIQ(IQ packet) throws UnauthorizedException {  
  31.         Element iq = packet.getElement();  
  32.         Element b = iq.element("b");  
  33.         String text = b.getText();  
  34.         XMPPServer.getInstance().getSessionManager().sendServerMessage(null, text);//广播信息   
  35.         return null;  
  36.     }  
  37.       
  38. }  
  39.   
  40. 建立org.jivesoftware.openfire.container.Plugin的实现类  
  41. package test.plugin;  
  42.   
  43. import java.io.File;  
  44. import java.util.List;  
  45.   
  46. import org.jivesoftware.openfire.XMPPServer;  
  47. import org.jivesoftware.openfire.container.Plugin;  
  48. import org.jivesoftware.openfire.container.PluginManager;  
  49. import org.jivesoftware.openfire.handler.IQHandler;  
  50.   
  51. public class MyPlugin implements Plugin {  
  52.   
  53.     private IQHandler iQHandler;  
  54.     @Override  
  55.     public void destroyPlugin() {  
  56.         XMPPServer.getInstance().getIQRouter().removeHandler(iQHandler);  
  57.         System.out.println("插件停止成功");  
  58.     }  
  59.   
  60.     @Override  
  61.     public void initializePlugin(PluginManager manager, File pluginDirectory) {  
  62.         iQHandler = new BroadcastsIQ();  
  63.         XMPPServer.getInstance().getIQRouter().addHandler(iQHandler);  
  64.         System.out.println("插件运行成功");  
  65.     }  
  66. }  
  67.   
  68. 建立plugin.xml文件  
  69. <?xml version="1.0" encoding="UTF-8"?>  
  70. <plugin>  
  71.     <class>test.plugin.MyPlugin</class>  
  72.     <name>Broadcasts messages</name>  
  73.     <description>This is an Broadcasts messages plugin.</description>  
  74.     <author>me</author>  
  75.   
  76.     <version>1.0</version>  
  77.     <date>01/01/2011/date>  
  78.     <url>none</url>  
  79.     <minServerVersion>3.0.0</minServerVersion>  
  80.     <licenseType>gpl</licenseType>  
  81.     <adminconsole>  
  82.     </adminconsole>  
  83. </plugin>  
  84.   
  85. 打包为任意名称的jar文件  
  86. 结构如下  
  87. test.jar  
  88. --classes  
  89.   --test   
  90.     --plugin  
  91.       --BroadcastsIQ.class  
  92.       --MyPlugin.class  
  93. --META-INF  
  94.   --MANIFEST.MF  
  95. --plugin.xml  
  96.   
  97.   
  98.   
  99. 然后把打好包的jar文件放到openfire的plugins目录下,openfire会自动加载,观察控制台是否输出 插件运行成功  
  100.   
  101.   
  102. 客户端:  
  103. 建立org.jivesoftware.smack.packet.IQ的实现类  
  104. package test.xmpp;  
  105.   
  106. import org.jivesoftware.smack.packet.IQ;  
  107.   
  108. public class Broadcasts extends IQ {  
  109.   
  110.     private String body;  
  111.     public String getElementName() {  
  112.         return "b";  
  113.     }  
  114.   
  115.     public String getNamespace() {  
  116.         return "com:message:broadcasts";  
  117.     }  
  118.   
  119.     public void setBody(String body) {  
  120.         this.body = body;  
  121.     }  
  122.   
  123.     public String getBody() {  
  124.         return body;  
  125.     }  
  126.   
  127.     @Override  
  128.     public String getChildElementXML() {  
  129.         if(getBody() == null){  
  130.             throw new RuntimeException("Broadcasts body is empty");  
  131.         }  
  132.         StringBuilder sb = new StringBuilder();  
  133.         sb.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append("\">").append(getBody()).append("</").append(getElementName()).append(">");  
  134.         return sb.toString();  
  135.     }  
  136.   
  137. }  
  138.   
  139. 然后在程序中  
  140.   
  141. Broadcasts b = new Broadcasts();  
  142. b.setBody("测试广播内容");  
  143. b.setType(IQ.Type.SET);  
  144. conn.sendPacket(b);