openfire 插件入门学习

来源:互联网 发布:校园网络诈骗是什么 编辑:程序博客网 时间:2024/06/05 09:30
关于插件开发的基本信息,可以参考其自带的文档页plugin-dev-guide.html
中文翻译传送门http://www.360doc.com/content/10/0707/15/1332348_37445649.shtml

原文地址:http://314858770.iteye.com/blog/908249

开发openfire插件开发流程:http://phoenixtoday.blogbus.com/logs/20285574.html

openfire插件开发指南:http://www.blogjava.net/jyleon/articles/254197.html

openfire插件开发4种方式:http://haidao.blog.51cto.com/59111/307620

openfire插件开发记录:http://blog.csdn.net/jxiaobing/article/details/667938

8

openfire源码构建指导(E文):http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/source-build.html

android openfire 插件开发:http://www.cnmsdn.com/html/201106/1308830174ID10035.html

Java代码  
实现功能,客户端发送一个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插件开发的开始吧  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 5岁儿童感冒鼻塞怎么办 3岁宝宝感冒鼻塞怎么办 宝宝9个月流鼻涕怎么办 鼻涕又黄又粘稠怎么办 鼻子一直流黄水怎么办 宝宝眼屎多又黄怎么办 宝宝痰多鼻涕多怎么办 小孩痰多鼻涕多怎么办 用qq登不了微博怎么办 中国银行u盾丢了怎么办 我的世界遇见him怎么办 考军校年龄超了怎么办 dnf组队就红电脑怎么办 九阳高压锅漏气怎么办 晋江买了防盗章怎么办 开车撞了人应该怎么办 开车撞了人没钱怎么办 驾照扣分12分后怎么办 车被交警拖走了怎么办 符石耐久没了怎么办 冒险岛2老是掉线怎么办 冒险岛老是掉线怎么办 冒险岛2延迟高怎么办 高速超速扣6分怎么办 优酷视频有密码怎么办 斗鱼直播很卡怎么办 鼠标的滑轮坏了怎么办 宝马1系烧机油怎么办 原房主不迁户口怎么办 做假账被发现了怎么办 裆部潮湿有异味怎么办 用了开塞露还是拉不出大便怎么办 安卓模拟器很卡怎么办 锁屏图案忘了怎么办 手机图案锁忘了怎么办 炸东西油变黑了怎么办 自热米饭吃完后怎么办 无线网密码忘了怎么办 普通税票开错了怎么办 发票购买本丢了怎么办 当兵的体能太差怎么办