处理收到的Stanzas

Posted endv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理收到的Stanzas相关的知识,希望对你有一定的参考价值。

处理收到的Stanzas

背部

Smack使用两种结构提供了一个灵活的框架来处理传入的节:

  • org.jivesoftware.smack.StanzaCollector - 一个允许您同步等待新节的类。
  • org.jivesoftware.smack.StanzaListener - 用于异步通知您传入节的接口。节事件侦听器用于事件样式编程,而节集合器具有节的结果队列,您可以对其进行轮询和阻止操作。因此,当您想要在节恰好进入时采取某些操作时,节监听器很有用,而当您想要等待特定节到达时,节收集器很有用。可以使用XMPPConnection实例创建Stanza收集器和侦听器

org.jivesoftware.smack.filter.StanzaFilter接口确定哪个特定节将被传递到一个StanzaCollectorStanzaListener可以在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);

标准Stanza过滤器

Smack包含一组丰富的节过滤器,或者您可以通过编码到StanzaFilter界面来创建自己的过滤器默认的过滤器集包括:

  • StanzaTypeFilter - 用于特定类类型的节的过滤器。
  • StanzaIdFilter - 具有特定数据包ID的节的过滤器。
  • ThreadFilter - 具有特定线程ID的消息节的过滤器。
  • ToMatchesFilter - 发送到特定地址的节的过滤器。
  • FromMatchesFilter - 从特定地址发送的节的过滤器。
  • StanzaExtensionFilter - 具有特定节扩展名的节的过滤器。
  • AndFilter - 通过两个过滤器实现逻辑AND操作。
  • OrFilter - 通过两个过滤器实现逻辑OR运算。
  • NotFilter - 在过滤器上实现逻辑NOT操作。

以上是关于处理收到的Stanzas的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法在 iOS 10 中处理收到的推送通知?

路由器和交换机收到报文的处理方式

java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?

Android GCM - 处理收到的消息

再次打开设备或 Internet 后,iOS 未收到待处理的 APNs 推送通知

AWS lambda 函数-“发生错误:收到来自 Lambda 的错误响应:已处理”