Openfire插件開發小結

一、使用Eclipse開發Openfire插件的配置
1.openfire運行配置
1) 點擊Run\Open Debug Dialog...,出現"Run"窗口
2) 選擇"Java Application",右鍵點擊"New"按鈕.
3) 在"Main"標籤頁,將New_configuration換成openfire.
4) 點擊Project\Browse按鈕,選擇openfire,再點OK.
5) 點擊Main class\Search按鈕,選擇main所在的類ServerStarter再點擊OK, 建議勾選Stop in main.
6) Arguments頁面。在VM arguments中加下內容
-DopenfireHome="${workspace_loc:Openfire}/target/openfire"。
7) 點擊Classpath標籤頁,選擇User Entries ,使得Advanced..按鈕變的可用.點擊Advanced按鈕.在彈出來的Advanced Options窗口,選擇Add Folders,再點OK,在Folder Selection窗口選擇Openfire/src/i18n文件夾,同樣的方式選擇Openfire/src/resources/jar文件夾,點擊OK。
8) 選擇Common標籤頁,勾選Debug,Run前面的框
9) 點擊Apply,再點擊Close
2.編譯
     將Openfire/src/i18n文件夾下的openfire_i18n_en.properties文件及Openfire/src/resources/jar文件夾下的admin-sidebar.xml文件拷貝到src\bin目錄下,打開ANT面板,選擇openfire【default】任務執行。
3.運行
      運行openfire,控制檯界面出現如下信息:
      Openfire 3.6.4 [Mar 15, 2010 8:49:33 AM]
      Admin console listening at http://127.0.0.1:9090
      在瀏覽器中打開上面顯示的地址,可進行openfire的管理配置。
二、插件開發的目錄結構

插件開發的目錄位於src\plugins\下面。如本例新建camacus文件夾用於開發camacus插件。


先說文件:
changelog.html。這個是插件的修改記錄,是一個網頁而已,開發員可修改。其主要的用途就是在使用WEB瀏覽器(如IE)登錄openfire服務器的時候,顯示的插件的更改記錄。
logo_large.png、logo_small.png。這是2個圖標文件,分別在使用WEB瀏覽器(如IE)登錄openfire服務器的時候顯示插件的圖標。分別是32*32和16*16大小的。
Plugin.xml。這個文件描述了插件重要的一些信息,在配置Openfire插件的時候至關重要。
Readme.html。這個和上面的那個一樣一個網頁而已。開發員可自行修改裏面的內容。
這裏要舉例說明一下plugin.xml的寫法:

<?xml version="1.0" encoding="UTF-8"?>

<plugin>
    <class>cama.Camaplugin</class>
    <name>Camacus Plugin</name>
    <description>The customization plugin for openfire.</description>
    <author>CDSoft</author>
    <version>1.0.0</version>
    <date>10/8/2012</date>
    <minServerVersion>3.0.0</minServerVersion>

    <adminconsole>
        <tab id="tab-server">
            <sidebar id="sidebar-server-manager">
                <item id="camacus" name="Camacus Plugin"
                    url="camacus.jsp"
                    description="The customization plugin for openfire." />
            </sidebar>
        </tab>
    </adminconsole>
</plugin>

主要配置如下:
class。表示插件的類。
Name。表示插件的名稱。
Description。一些描述信息,可以自定義寫。
Author。作者。
Version。插件版本。
Date。發佈日期。
minServerVersion。需要最低的服務器版本。
Adminconsole。這裏是配置在web上訪問Openfire服務器的時候左側邊欄加入的條目。如果不想加入,可以在adminconsole的子項都去掉。我這裏是配置了一個頁面camacus.jsp。這個頁面在src的web目錄下。

三、插件開發的種類

1. 註冊一個插件作爲一個組成部分 。組件接收所有數據包給某一特定子網域。例如,test_component.example.com。因此,數據包發送到joe@test_component.example.com將交付給該組件。請注意,子域定義爲組件無關的DNS條目的子域。所有的XMPP協議路由在套接字級別是使用主服務器域( example.com在上面的例子) ;子域僅用於路由的XMPP協議的服務器。 
2. 註冊一個插件作爲IQHandler 。IQHandler處理特別元素的名稱和命名空間的IQ包。下面的代碼片斷演示瞭如何註冊一個IQHandler : 
 IQHandler myHandler = new MyIQHander();
 IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();
 iqRouter.addHandler(myHandler);
3. 註冊一個插件作爲PacketInterceptor,接收所有通過該系統的數據包,並有選擇地予以拒絕。例如,一個攔截可以拒絕所有的郵件或載褻瀆國旗他們審查的管理員。 
4. 您可以使用Openfire屬性來儲存持續插件設置:JiveGlobals.getProperty(String)和JiveGlobals.setProperty(String,String)的方法。讓您的插件監聽屬性變化,使用org.jivesoftware.util.PropertyEventListener方法。您可以使用PropertyEventDispatcher.addListener ( PropertyEventListener )方法把您的插件作爲一個監聽者。注意你一定要在您的插件的destroyPlugin()反註冊監聽器。

本篇開發是PacketInterceptor的插件開發小結。從頭到尾都詳細介紹瞭如何開發一個PacketInterceptor插件實現消息的攔截和處理。

四、開發一個PacketInterceptor插件吧。

首先,從接口Plugin開發一個自定義的插件類。類名稱之前的Plugin.xml裏面已經配置了,就是用那個名稱Camaplugin。
然後,實例化Plugin接口的initializePlugin和destroyPlugin兩個方法。其中主要是initializePlugin。後面start()方法是後來啓動webservice,如果不涉及webservice可以去掉這個方法調用代碼如下:

	/**
	 * 插件載入
	 */
	public void initializePlugin(PluginManager manager, File pluginDirectory)
	{
		System.out.println("載入Openfire的門戶集成插件包!");
		cpi = new CamaPacketInterceptor();
		InterceptorManager.getInstance().addInterceptor(cpi);
		start();
	}
/**
	 * 插件註銷
	 */
	public void destroyPlugin()
	{
		if(cpi != null)
		{
				InterceptorManager.getInstance().removeInterceptor(cpi);
	     }
	}


其中可以看到CamaPacketInterceptor。這個是我手工編寫的一個類,這個類實現了PacketInterceptor這個接口。這個接口需要實例化的方法只有一個,就是這個包攔截方法。

public void interceptPacket(Packet packet, Session session,
			boolean incoming, boolean processed) throws PacketRejectedException
	{
		 if(!processed && packet instanceof Message && incoming)
		 {//對packet的處理Message進行處理
		 }
}


這裏packet是instanceof Message的。Packet還可以是其他種類。IQ, Message, Presence, Route。一共這4種。

接下來。如果想要丟棄被攔截的包。則通過拋出PacketRejectedException實現。

五、總結。
插件開發好以後編譯完成就可以運行了。啓動Openfire服務器。然後服務器會自動加載這個開發的插件。也可以通過登錄Web來進行Openfire的插件配置。

發佈了38 篇原創文章 · 獲贊 20 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章