日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

tigase自定義插件的開發(fā)與配備

 WindySky 2016-04-10
      tigase自定義插件的開發(fā)與配置

tigase插件開發(fā)官方地址:http://www./content/plugin-development

下面是自己的翻譯加理解,英文一般,如果有誤請大家指出。

 

-----------------------------------------------------------------------------------------------------

 

**************************************************簡介*****************************************
每個PACKETS都會經(jīng)過SM(session manager)的四個處理步驟:
1,Pre-processing
為了不影響Session Manager的性能需要限制該方法處理時間為極小值,用于判斷當(dāng)前package是否應(yīng)該被阻塞,如果返回為true,則表示阻塞。(應(yīng)該只要有一個pre-processor阻塞就算阻塞)
2,Processing
如果一個Package沒有被任何的pre-processors阻塞,則繼續(xù)執(zhí)行該方法。所有對當(dāng)前XML段感興趣的processor都會將該段加入到獨立的線程里運行,這些現(xiàn)成使用內(nèi)部固定的隊列。當(dāng)所有感興趣的processor都執(zhí)行完后就可以得到通知進入下一步。
3,post-processor
對于在第2步中沒有被任何processor處理的package將會通過所有的post-processors,并被最后一個post-processor轉(zhuǎn)發(fā)到一個目的地,大多數(shù)情況是以<message/>的形式被轉(zhuǎn)發(fā)。
4,filter
對于以上三步任何形式的結(jié)果result輸出,都會被所有的filters攔截過濾,這些結(jié)果可能最終被攔截也可能被放行。

由于session manager和processors都是消費者,所以在所有的processors中應(yīng)該至少有一個processor新建一個package并發(fā)送給某個目標(biāo)。

 

 


***************************************************深入*****************************************

當(dāng)需要編寫一個自己的PLUGIN的時候根據(jù)上面的步驟分別需要實現(xiàn)以下四個接口:
1,XMPPPreprocessorIfc
2,XMPPProcessorIfc
3,XMPPPostprocessorIfc
4,XMPPPacketFilterIfc
這四個接口各需要實現(xiàn)一個簡單的方法,每個方法的參數(shù)類似,參數(shù)描述如下:
-Packet packet 需要被處理的PACKET,該PACKET不能為NULL雖然在PROCESS處理過程中無法修改它
-XMPPResourceConnection session 用于保存所有用戶的數(shù)據(jù),它提供權(quán)限訪問用戶的倉庫數(shù)據(jù),在沒有在線用戶SESSION的情況下該參數(shù)可以為null
-NonAuthUserRepository repo 該參數(shù)往往在參數(shù)session為NULL的時候被使用,它用于為不在線的用戶保存私有或公開的數(shù)據(jù)信息。
-Queue<Packet> results 這個為輸入數(shù)據(jù)包的處理結(jié)果產(chǎn)生的數(shù)據(jù)包集合,它總被要求一定要存放一個輸入數(shù)據(jù)包PACKET的備份到里面,其實包含了所有需要處理的PACKET,包括process生成的結(jié)果packet。
-Map<String, Object> settings 為PLUGIN制定配置信息,一般情況下不需要使用,然而如果需要訪問額外的數(shù)據(jù)庫則可以通過配置文件將數(shù)據(jù)庫連接字符串傳給plugin

 

 


*****************************************************實戰(zhàn)****************************************

編寫的時候根據(jù)自己需要來決定實現(xiàn)哪個接口,當(dāng)然也可以實現(xiàn)多個接口。
具體操作參考http://www./content/writing-plugin-code

配置plugin,假如新建的plugin的ID為myplugin,則修改運行時加載的文件init.properties,加入如下一行
--sm-plugins=+myplugin,-oldplugin
表示裝載進去新的myplugin,同時不去加載oldplugin

 

 

下面是自己寫的一個自定義PLUGIN:

  1. /** 
  2.  */  
  3. public class SearchProcessImpl extends XMPPProcessorAbstract implements XMPPProcessorIfc{  
  4.   
  5.     /** Class loggeer */  
  6.     private static final Logger log = Logger.getLogger(SearchProcessImpl.class.getName());  
  7.     private static final SimpleParser parser = SingletonFactory.getParserInstance();  
  8.   
  9.     private static final String[] searchConditions = new String[]{"userId", "email"};  
  10.     private static final String XMLNS = "jabber:iq:search";  
  11.     private static final String[] ELEMENTS = { "query" };  
  12.     /** Define the plugin ID **/  
  13.     private static final String ID = XMLNS;  
  14.   
  15.     @Override  
  16.     public void processFromUserToServerPacket(JID connectionId, Packet packet,  
  17.             XMPPResourceConnection session, NonAuthUserRepository repo,  
  18.             Queue<Packet> results, Map<String, Object> settings)  
  19.             throws PacketErrorTypeException {  
  20.         //處理客戶端發(fā)送過來的packet  
  21.           
  22.     }  
  23.   
  24.   
  25.     @Override  
  26.     public void processServerSessionPacket(Packet packet,  
  27.             XMPPResourceConnection session, NonAuthUserRepository repo,  
  28.             Queue<Packet> results, Map<String, Object> settings)  
  29.             throws PacketErrorTypeException {  
  30.         //處理服務(wù)器內(nèi)部的packet  
  31.   
  32.     }  
  33.   
  34.     @Override  
  35.     public String id() {  
  36.          return ID; }  
  37.   
  38.   
  39.     @Override  
  40.     public String[] supElements() {  
  41.          return ELEMENTS;  
  42.     }  
  43.   
  44.     /** 
  45.      * Method description 
  46.      * 
  47.      * 
  48.      * @return 
  49.      */  
  50.     @Override  
  51.     public String[] supNamespaces() {  
  52.         return new String[]{XMLNS};  
  53.     }  
  54.   
  55. }  

 

該方法用于在tigase中實現(xiàn)XMPP協(xié)議中的java:iq:search功能。

 

寫完之后修改啟動配置文件ini.properties為:

  1. --sm-plugins=......,+java:iq:search  

 

其中java:iq:search與類中的ID屬性值相同

 

此時,當(dāng)你用PIS在客戶端想服務(wù)器端發(fā)送如下XML片段的時候:

  1. <iq type="get"  
  2. id="12244603"  
  3. to="tigase-com">  
  4. <query xmlns="jabber:iq:search">  
  5. </query>  
  6. </iq>  

 類中的方法processFromUserToServerPacket()將會被調(diào)用

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多