背部html
Smack使用两种结构提供了一个灵活的框架来处理传入的节:编程
org.jivesoftware.smack.StanzaCollector
- 一个容许您同步等待新节的类。org.jivesoftware.smack.StanzaListener
- 用于异步通知您传入节的接口。节事件侦听器用于事件样式编程,而节集合器具备节的结果队列,您能够对其进行轮询和阻止操做。所以,当您想要在节刚好进入时采起某些操做时,节监听器颇有用,而当您想要等待特定节到达时,节收集器颇有用。能够使用XMPPConnection
实例建立Stanza收集器和侦听器。该org.jivesoftware.smack.filter.StanzaFilter
接口肯定哪一个特定节将被传递到一个StanzaCollector
或StanzaListener
。能够在org.jivesoftware.smack.filter
包中找到许多预约义的过滤器。框架
如下代码片断演示了如何注册节收集器和节监听器:异步
// Create a stanza filter to listen for new messages from a particular // user. We use an AndFilter to combine two other filters._ StanzaFilter filter = new AndFilter(StanzaTypeFilter.Message, FromMatchesFilter.create("mary@jivesoftware.com")); // Assume we've created an XMPPConnection named "connection". // First, register a stanza collector using the filter we created. StanzaCollector myCollector = connection.createStanzaCollector(filter); // Normally, you'd do something with the collector, like wait for new packets. // Next, create a stanza listener. We use an anonymous inner class for brevity. StanzaListener myListener = new StanzaListener() { **public** **void** processStanza(Stanza stanza) { // Do something with the incoming stanza here._ } }; // Register the listener._ connection.addAsyncStanzaListener(myListener, filter); // or for a synchronous stanza listener use connection.addSyncStanzaListener(myListener, filter);
Smack包含一组丰富的节过滤器,或者您能够经过编码到StanzaFilter
界面来建立本身的过滤器。默认的过滤器集包括:编码
StanzaTypeFilter
- 用于特定类类型的节的过滤器。StanzaIdFilter
- 具备特定数据包ID的节的过滤器。ThreadFilter
- 具备特定线程ID的消息节的过滤器。ToMatchesFilter
- 发送到特定地址的节的过滤器。FromMatchesFilter
- 从特定地址发送的节的过滤器。StanzaExtensionFilter
- 具备特定节扩展名的节的过滤器。AndFilter
- 经过两个过滤器实现逻辑AND操做。OrFilter
- 经过两个过滤器实现逻辑OR运算。NotFilter
- 在过滤器上实现逻辑NOT操做。