天天看点

认识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