處理收到的Stanzas

處理收到的Stanzas

背部html

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操做。
相關文章
相關標籤/搜索