openfire插件入门学习

openfire 版本3.6.4

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

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

Java代码 收藏代码
  1. 实现功能,客户端发送一个IQ包含内容的节给服务器,服务器取得内容,然后广播给所有的在线用户
  2. 新定义的iq为<iqid="xxx"type="set"><bxmlns="com:message:broadcasts">输入发言内容</b></iq>
  3. 服务器端:
  4. 建立org.jivesoftware.openfire.handler.IQHandler的实现类
  5. packagetest.plugin;
  6. importorg.dom4j.Element;
  7. importorg.jivesoftware.openfire.IQHandlerInfo;
  8. importorg.jivesoftware.openfire.XMPPServer;
  9. importorg.jivesoftware.openfire.auth.UnauthorizedException;
  10. importorg.jivesoftware.openfire.handler.IQHandler;
  11. importorg.xmpp.packet.IQ;
  12. publicclassBroadcastsIQextendsIQHandler{
  13. privateIQHandlerInfoinfo;
  14. publicBroadcastsIQ(){
  15. super("用户广播模块");
  16. info=newIQHandlerInfo("b","com:message:broadcasts");
  17. }
  18. @Override
  19. publicIQHandlerInfogetInfo(){
  20. returninfo;
  21. }
  22. @Override
  23. publicIQhandleIQ(IQpacket)throwsUnauthorizedException{
  24. Elementiq=packet.getElement();
  25. Elementb=iq.element("b");
  26. Stringtext=b.getText();
  27. XMPPServer.getInstance().getSessionManager().sendServerMessage(null,text);//广播信息
  28. returnnull;
  29. }
  30. }
  31. 建立org.jivesoftware.openfire.container.Plugin的实现类
  32. packagetest.plugin;
  33. importjava.io.File;
  34. importjava.util.List;
  35. importorg.jivesoftware.openfire.XMPPServer;
  36. importorg.jivesoftware.openfire.container.Plugin;
  37. importorg.jivesoftware.openfire.container.PluginManager;
  38. importorg.jivesoftware.openfire.handler.IQHandler;
  39. publicclassMyPluginimplementsPlugin{
  40. privateIQHandleriQHandler;
  41. @Override
  42. publicvoiddestroyPlugin(){
  43. XMPPServer.getInstance().getIQRouter().removeHandler(iQHandler);
  44. System.out.println("插件停止成功");
  45. }
  46. @Override
  47. publicvoidinitializePlugin(PluginManagermanager,FilepluginDirectory){
  48. iQHandler=newBroadcastsIQ();
  49. XMPPServer.getInstance().getIQRouter().addHandler(iQHandler);
  50. System.out.println("插件运行成功");
  51. }
  52. }
  53. 建立plugin.xml文件
  54. <?xmlversion="1.0"encoding="UTF-8"?>
  55. <plugin>
  56. <class>test.plugin.MyPlugin</class>
  57. <name>Broadcastsmessages</name>
  58. <description>ThisisanBroadcastsmessagesplugin.</description>
  59. <author>me</author>
  60. <version>1.0</version>
  61. <date>01/01/2011/date>
  62. <url>none</url>
  63. <minServerVersion>3.0.0</minServerVersion>
  64. <licenseType>gpl</licenseType>
  65. <adminconsole>
  66. </adminconsole>
  67. </plugin>
  68. 打包为任意名称的jar文件
  69. 结构如下
  70. test.jar
  71. --classes
  72. --test
  73. --plugin
  74. --BroadcastsIQ.class
  75. --MyPlugin.class
  76. --META-INF
  77. --MANIFEST.MF
  78. --plugin.xml
  79. 然后把打好包的jar文件放到openfire的plugins目录下,openfire会自动加载,观察控制台是否输出插件运行成功
  80. 客户端:
  81. 建立org.jivesoftware.smack.packet.IQ的实现类
  82. packagetest.xmpp;
  83. importorg.jivesoftware.smack.packet.IQ;
  84. publicclassBroadcastsextendsIQ{
  85. privateStringbody;
  86. publicStringgetElementName(){
  87. return"b";
  88. }
  89. publicStringgetNamespace(){
  90. return"com:message:broadcasts";
  91. }
  92. publicvoidsetBody(Stringbody){
  93. this.body=body;
  94. }
  95. publicStringgetBody(){
  96. returnbody;
  97. }
  98. @Override
  99. publicStringgetChildElementXML(){
  100. if(getBody()==null){
  101. thrownewRuntimeException("Broadcastsbodyisempty");
  102. }
  103. StringBuildersb=newStringBuilder();
  104. sb.append("<").append(getElementName()).append("xmlns=\"").append(getNamespace()).append("\">").append(getBody()).append("</").append(getElementName()).append(">");
  105. returnsb.toString();
  106. }
  107. }
  108. 然后在程序中
  109. Broadcastsb=newBroadcasts();
  110. b.setBody("测试广播内容");
  111. b.setType(IQ.Type.SET);
  112. conn.sendPacket(b);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值