乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多