openfire

          研究

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            0 隨筆 :: 3 文章 :: 7 評(píng)論 :: 0 Trackbacks
          openfire3.6.3插件開(kāi)發(fā)方法說(shuō)明:
          作用:初始化時(shí)在控制臺(tái)打印測(cè)試消息。

          開(kāi)發(fā)環(huán)境:winxp/myeclipse6.5/jdk1.5&1.6/mysql5.0/openfire3.6.3

          QQ群:28588322 (openfire專題研究小組)

           

          開(kāi)發(fā)步驟:
          1. 布署openfire3.6.3源碼(請(qǐng)參考o(jì)penfire3.6.3導(dǎo)入eclipse項(xiàng)目實(shí)現(xiàn)方法)
          結(jié)構(gòu)如下:

          2. src/plugins目錄下新建文件夾itvi。并按下圖的目錄結(jié)構(gòu)新建對(duì)應(yīng)的文件。
          plugin.xml文件代碼如下:

          <?xml version="1.0" encoding="UTF-8"?>
          <plugin>
          <class>org.jivesoftware.openfire.plugin.Itvi</class>
          <name>Itvi</name>
          <description>Broadcasts messages to users.</description>
          <author>openfireteam</author>
          <version>1.7.0</version>
          <date>2/19/2009</date>
          <url>http://openfireteam.blogjava.net</url>
          <minServerVersion>3.6.3</minServerVersion>
          </plugin>

           

          Itvi.java文件代碼如下:

          package org.jivesoftware.openfire.plugin;
          import org.dom4j.Element;
          import org.jivesoftware.openfire.IQHandlerInfo;

          import org.xmpp.packet.*;
          import org.jivesoftware.openfire.handler.IQHandler;
          import org.jivesoftware.openfire.auth.UnauthorizedException;

          /**
          * 處理客戶端發(fā)來(lái)的IQ,并回送結(jié)果IQ
          *
          * @author Phoenix
          *
          * Mar 14, 2008 4:55:33 PM
          *
          * version 0.1
          */

          import org.dom4j.DocumentHelper;
          import org.dom4j.Element;
          import org.dom4j.QName;
          import org.jivesoftware.openfire.XMPPServer;
          import org.jivesoftware.openfire.container.Plugin;
          import org.jivesoftware.openfire.container.PluginManager;
          import org.jivesoftware.openfire.disco.IQDiscoInfoHandler;
          import org.jivesoftware.openfire.disco.IQDiscoItemsHandler;
          import org.jivesoftware.openfire.forms.DataForm;
          import org.jivesoftware.openfire.forms.FormField;
          import org.jivesoftware.openfire.forms.spi.XDataFormImpl;
          import org.jivesoftware.openfire.forms.spi.XFormFieldImpl;
          import org.jivesoftware.openfire.resultsetmanager.ResultSet;
          import org.jivesoftware.openfire.resultsetmanager.ResultSetImpl;
          import org.jivesoftware.openfire.user.User;
          import org.jivesoftware.openfire.user.UserManager;
          import org.jivesoftware.openfire.user.UserNotFoundException;
          import org.jivesoftware.util.*;
          import org.xmpp.component.Component;
          import org.xmpp.component.ComponentException;
          import org.xmpp.component.ComponentManager;
          import org.xmpp.component.ComponentManagerFactory;
          import org.xmpp.packet.IQ;
          import org.xmpp.packet.IQ.Type;
          import org.xmpp.packet.JID;
          import org.xmpp.packet.Packet;
          import org.xmpp.packet.PacketError;
          import org.xmpp.packet.PacketError.Condition;

          import java.io.File;
          import java.util.*;
          import java.util.Map.Entry;

          public class Itvi implements Plugin
          {
          private XMPPServer server;

          /*
          * (non-Javadoc)
          *
          * @see org.jivesoftware.openfire.container.Plugin#destroyPlugin()
          */
          public void destroyPlugin()
          {

          }

          /*
          * (non-Javadoc)
          *
          * @see org.jivesoftware.openfire.container.Plugin#initializePlugin(org.jivesoftware.openfire.container.PluginManager,
          * java.io.File)
          */
          public void initializePlugin(PluginManager manager, File pluginDirectory)
          {
          server = XMPPServer.getInstance();
          server.getIQRouter().addHandler(new ItviIQHander()); //
          System.out.println("測(cè)試插件啟動(dòng)成功");
          }

          }

          ItviIQHander.java文件代碼如下:

           

          package org.jivesoftware.openfire.plugin;
          import org.dom4j.Element;
          import org.jivesoftware.openfire.IQHandlerInfo;

          import org.xmpp.packet.*;
          import org.jivesoftware.openfire.handler.IQHandler;
          import org.jivesoftware.openfire.auth.UnauthorizedException;

          /**
          * 處理客戶端發(fā)來(lái)的IQ,并回送結(jié)果IQ
          *
          * @author Phoenix
          *
          * Mar 14, 2008 4:55:33 PM
          *
          * version 0.1
          */
          public class ItviIQHander extends IQHandler
          {

          private static final String MODULE_NAME = "group tree handler";

          private static final String NAME_SPACE = "com:im:group";

          private IQHandlerInfo info;

          public ItviIQHander()
          {
          super(MODULE_NAME);
          info = new IQHandlerInfo("gruops", NAME_SPACE);
          }

          /*
          * (non-Javadoc)
          *
          * @see org.jivesoftware.openfire.handler.IQHandler#getInfo()
          */
          @Override
          public IQHandlerInfo getInfo()
          {
          return info;
          }

          /*
          * (non-Javadoc)
          *
          * @see org.jivesoftware.openfire.handler.IQHandler#handleIQ(org.xmpp.packet.IQ)
          */
          @Override
          public IQ handleIQ(IQ packet) throws UnauthorizedException
          {
          IQ reply = IQ.createResultIQ(packet);
          Element groups = packet.getChildElement();//1

          if (!IQ.Type.get.equals(packet.getType()))
          {
          System.out.println("非法的請(qǐng)求類型");
          reply.setChildElement(groups.createCopy());
          reply.setError(PacketError.Condition.bad_request);
          return reply;
          }

          //String userName = StringUtils.substringBefore(packet.getFrom().toString(),"@");

          //GroupManager.getInstance().initElement(groups,userName);

          //reply.setChildElement(groups.createCopy());//2

          //System.out.println("返回的最終XML" reply.toXML());

          return reply;
          }

          }

          3.打包插件
          a.第一次打包需配置ant工具。在環(huán)境變量中,

          添加 path=C:\Program Files\Java\jdk1.5.0_09\;D:\Program Files\MyEclipse6.5\eclipse\plugins\org.apache.ant_1.7.0.v200706080842\bin (如果原來(lái)有path,在變量值的尾部添加半角分號(hào) ; 然后再加入上面的jdk和ant路徑 )

          b.編譯

          進(jìn)入cmd,進(jìn)入 openfire/build所在目錄:輸入命令:ant plugins 等待執(zhí)行完,而且沒(méi)有報(bào)錯(cuò),說(shuō)明打包成功。在openfire3.6.3\target\openfire\plugins目錄下就生成了itvi.jar

          4.測(cè)試
          啟動(dòng)openfire ,如發(fā)現(xiàn)控制臺(tái)輸出“測(cè)試插件啟動(dòng)成功”,說(shuō)明插件開(kāi)發(fā)成功。





          posted on 2009-02-19 18:08 jyleon 閱讀(6589) 評(píng)論(4)  編輯  收藏 所屬分類: openfire插件

          評(píng)論

          # re: openfire3.6.3插件開(kāi)發(fā)方法(經(jīng)小組測(cè)試成功) 2009-06-15 18:24 jakai
          你好像沒(méi)有寫build.xml的內(nèi)容,怎么會(huì)編譯呢?  回復(fù)  更多評(píng)論
            

          # re: openfire3.6.3插件開(kāi)發(fā)方法(經(jīng)小組測(cè)試成功)[未登錄](méi) 2009-06-15 20:06 jyleon
          不需要寫build文件,用 eclipse的ant工具編譯  回復(fù)  更多評(píng)論
            

          # re: openfire3.6.3插件開(kāi)發(fā)方法(經(jīng)小組測(cè)試成功)[未登錄](méi) 2010-04-21 11:05 kevin
          你好,怎么第一個(gè)圖看不了呢  回復(fù)  更多評(píng)論
            

          # re: openfire3.6.3插件開(kāi)發(fā)方法(經(jīng)小組測(cè)試成功)[未登錄](méi) 2010-12-02 12:38 Edward
          請(qǐng)問(wèn)在客戶端如何訪問(wèn)openfire里面自己開(kāi)發(fā)的插件?
          QQ:21519776  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 桦川县| 滕州市| 介休市| 皮山县| 巴中市| 七台河市| 衡阳市| 六安市| 澄城县| 新平| 徐汇区| 大连市| 洞口县| 兰溪市| 新建县| 汤原县| 安陆市| 丰镇市| 陵川县| 抚宁县| 乡城县| 无棣县| 大洼县| 府谷县| 广德县| 安顺市| 阜新市| 冕宁县| 南召县| 高台县| 历史| 岱山县| 枝江市| 西和县| 呼和浩特市| 行唐县| 镇赉县| 垣曲县| 土默特右旗| 嵩明县| 大姚县|