认识smack4.1.4基本对象——StanzaFilter接口

你猜 阅读:714 2021-03-31 22:22:30 评论:0

一StanzaFilte接口介绍

该接口通过定义方法过滤packet对象中的特殊属性,该接口主要用于创建packet的监听器(listener)和收集器(collector)---通过StanzaFilte对监听器和收集器需要处理的packet进行过滤,让他们去处理指定部分packet。

预先定义的几个过滤器,也就是继承了StanzaFilter接口(AbstractListFilterAfterXStanzasAndFilterDelayedStanzaFilterFlexibleStanzaTypeFilterForEveryMessageForEveryStanzaForMatchingPredicateOrAfterXStanzasFromMatchesFilter,IQReplyFilterIQResultReplyFilterIQTypeFilterMessageTypeFilterMessageWithBodiesFilterMessageWithSubjectFilterNotFilterOnceForThisStanzaOrFilterPacketExtensionFilter,PacketIDFilterPacketTypeFilterPresenceTypeFilterSetActiveListFilterSetDefaultListFilterShortcutPredicatesStanzaExtensionFilterStanzaIdFilterStanzaTypeFilterThreadFilter,ToFilter)这些预定义的过滤器可以进行逻辑组合,但是实现更为复杂的 Stanz 拦截,可以使用AndFilter 和OrFilter实现,我们也可以实现自己的Filter 但是必须实现指定接口.

二使用示例

下面的示例所创建的过滤器,就只保留指定ID的stanza。其实现方法:使用匿名内部类定义一个StanzaFilter,需要实现其accept方法,返回布尔值表示是否符合匹配条件,创建好的myFilter接口可以被用于创建PacketCollector对象,有关PacketCollector对象的介绍,参见后文。

 // Use an anonymous inner class to define a stanza filter that returns 
 // all stanzas that have a stanza ID of "RS145". 
 StanzaFilter myFilter = new StanzaFilter() { 
     public boolean accept(Stanza stanza) { 
         return "RS145".equals(stanza.getStanzaId()); 
     } 
 }; 
 // Create a new stanza collector using the filter we created. 
 PacketCollector myCollector = connection.createPacketCollector(myFilter);


声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号