天天看點

認識smack中的基本對象 - 接口PacketFilter

一 接口PacketFilter的介紹

該接口定義了一種過濾packet對象的方法,對于一個packet結果集,隻取具有指定屬性的子集。該接口主要用于建立packet的監聽器(listener)和收集器(collector),通過PacketFilter對監聽器和收集器需要處理的packet進行過濾,讓他們去處理指定的一部分packet。

Smack中已經預定義了一些基本的packet過濾器,也就是繼承該接口的子類:AndFilter,FromContainsFilter,FromMatchesFilter, IQTypeFilter, MessageTypeFilter, NotFilter, OrFilter, PacketExtensionFilter, PacketIDFilter, PacketTypeFilter, ThreadFilter, ToContainsFilter。這些過濾器又可以通過AndFilter和OrFilter進行組合,進而構造一些更複雜的過濾器。通過實作該接口,使用者還可以自定義過濾器。

二使用示例

下面的示例所建立的過濾器,就隻保留指定ID的packet。其實作方法:使用匿名内部類定義一個PacketFilter,需要實作其accept方法,傳回布爾值表示是否符合比對條件,建立好的packetFilter接口可以被用于建立PacketCollector對象,有關PacketCollector對象的介紹,參見後文。

// Use an anonymous inner class to define a packet filter that returns
 // all packets that have a packet ID of "RS145".
 PacketFilter myFilter = new PacketFilter() {
     public boolean accept(Packet packet) {
         return "RS145".equals(packet.getPacketID());
     }
 };
 // Create a new packet collector using the filter we created.
 PacketCollector myCollector = packetReader.createPacketCollector(myFilter);
           

原文:http://www.igniterealtime.org/builds/smack/docs/3.2.2/javadoc/index.html?org/jivesoftware/smack/AccountManager.html