nl::Weave::Profiles::DataManagement_Current::SubscriptionClient

摘要

公開類型

@130 列舉
EventCallback)(void *const aAppState, EventID aEvent, const InEventParam &aInParam, OutEventParam &aOutParam) typedef
void(*
將訂閱事件傳遞至應用程式的回呼。
EventID{
  kEvent_OnSubscriptionTerminated = 1,
  kEvent_OnExchangeStart = 2,
  kEvent_OnSubscribeRequestPrepareNeeded = 3,
  kEvent_OnSubscriptionEstablished = 4,
  kEvent_OnNotificationRequest = 5,
  kEvent_OnNotificationProcessed = 6,
  kEvent_OnEventStreamReceived = 7,
  kEvent_OnSubscriptionActivity = 8,
  kEvent_OnUpdateComplete = 9,
  kEvent_OnNoMorePendingUpdates = 10
}
列舉
ResubscribePolicyCallback)(void *const aAppState, ResubscribeParam &aInParam, uint32_t &aOutIntervalMsec) typedef
void(*
回呼,擷取下次重新訂閱前,要等待的時間間隔。

公開的靜態函式

DefaultEventHandler(EventID aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
void
DefaultResubscribePolicyCallback(void *const aAppState, ResubscribeParam & aInParam, uint32_t & aOutIntervalMsec)
void
預設政策導入作業會從不斷增加的時段中隨機挑選解析度為毫秒的隨機時段,直到達到 WDM_REsubscribe_MAX_FIBONACCI_STEP_INDEX 為止。

公用函式

AbortSubscription(void)
void
取消訂閱。
ClearUpdated(TraitUpdatableDataSink *aDataSink, PropertyPathHandle aPropertyHandle)
DisableResubscribe(void)
void
停用重新訂閱機制。
DiscardUpdates()
void
指示 SubscriptionClient 清空待更新的 TraitPath 組合,並取消進行中的更新要求 (如果有的話)。
EnableResubscribe(ResubscribePolicyCallback aCallback)
void
啟用自動重新訂閱功能。
EndSubscription(void)
結束訂閱。
FlushUpdate()
表示應用程式已完成所有 TraitUpdatableDataSinks 異動的信號。
FlushUpdate(bool aForce)
Free(void)
void
釋出這個 SubscriptionClient 物件。
GetBinding(void) const
GetLivenessTimeoutMsec(void) const
uint32_t
GetPeerNodeId(void) const
uint64_t
GetSubscriptionId(uint64_t *const apSubscriptionId)
IndicateActivity(void)
void
InitiateCounterSubscription(const uint32_t aLivenessTimeoutSec)
void
InitiateSubscription(void)
void
SubscriptionClient 設為發起者 (而非計數器訂閱者),並在沒有訂閱項目的情況下啟動。
IsCanceling() const
bool
IsEstablished()
bool
IsEstablishedIdle()
bool
IsFree()
bool
IsInProgressOrEstablished()
bool
IsInResubscribeHoldoff()
bool
IsRetryEnabled()
bool
IsTerminated()
bool
IsUpdatePendingOrInProgress()
bool
LockUpdateMutex(void)
void
OnCatalogChanged()
void
如果 TraitDataSink 目錄經過修改,則應呼叫這個方法。
ResetResubscribe(void)
void
啟動重新訂閱機制。
SetLivenessTimeoutMsec(uint32_t val)
void
SetUpdated(TraitUpdatableDataSink *aDataSink, PropertyPathHandle aPropertyHandle, bool aIsConditional)
SuspendUpdateRetries()
void
指示 SubscriptionClient 停止重試更新要求。
UnlockUpdateMutex(void)
void

結構

nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::LastObservedEvent
nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::ResubscribeParam

工會

nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::InEventParam
nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::OutEventParam

公開類型

@130

 @130

EventCallback

void(* EventCallback)(void *const aAppState, EventID aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)

將訂閱事件傳遞至應用程式的回呼。

詳細說明
參數
[in] aAppState
SubscriptionClient 初始化期間設定的應用程式狀態指標。
[in] aEvent
指出正在進行的活動
[in] aInParam
包含事件其他詳細資料的結構體
[out] aOutParam
應用程式傳回的資訊

EventID

 EventID
屬性
kEvent_OnEventStreamReceived

SubscriptionEngine 在 NotificationRequest 訊息中計算事件串流時,就會產生這個事件。

此時應用程式可能會呼叫 EndSubscription()AbortSubscription()Free()

kEvent_OnExchangeStart

在繫結準備且設定 ExchangeContext 後產生,但訊息傳送前都會產生。

這是應用程式調整 ExchangeContext 設定的最後機會,mEC 有效且可調整逾時設定。應用程式不得碰觸用戶端中的其他欄位,也不得關閉 ExchangeContext

kEvent_OnNoMorePendingUpdates

此事件表示更新集中的所有路徑都已由對等點處理,因此不再需要更新路徑。

kEvent_OnNotificationProcessed

SubscriptionEngine 完成 NotificationRequest 訊息時就會產生。

此時應用程式可能會呼叫 EndSubscription()AbortSubscription()Free()

kEvent_OnNotificationRequest

於接收 NotificationRequest 時產生。

此時應用程式可能會呼叫 EndSubscription()AbortSubscription()Free()

kEvent_OnSubscribeRequestPrepareNeeded

在引擎準備傳送 SubscriptionRequest 時傳送。

應用程式應填入其要訂閱的路徑。

kEvent_OnSubscriptionActivity

表示訂閱活動的事件。

每當客戶收到訂閱活動指示時,就會產生這個錯誤;這包括建立成功的訂閱、接收的 NotificationRequest 或接收回應 SubscriptionsConfirm 訊息的狀態報告。

kEvent_OnSubscriptionEstablished

在成功建立訂閱時產生。

此時應用程式可能會呼叫 EndSubscription()AbortSubscription()Free()

kEvent_OnSubscriptionTerminated

標示訂閱期。

傳送至 nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::EventCallback 的參數將指出系統是否自動嘗試重新訂閱。

在事件處理常式呼叫期間,用戶端的狀態會是 Terminated。如果未嘗試重試,用戶端的狀態會在事件處理常式傳回時轉換為 Initialized。否則,狀態會轉換為 ResubscribeHoldoff,並在保留時間過後嘗試重新建立訂閱項目。

應用程式在此狀態中可以呼叫 AbortSubscription()Free()

傳送的參數也會包含錯誤代碼,指出取消訂閱的原因。

訂閱已終止的可能原因很多 (例如缺少 WRM ACK、ExchangeContext 分配失敗、回應逾時......)用戶端產生的一些錯誤代碼:

錯誤代碼 意義
WEAVE_ERROR_INVALID_MESSAGE_TYPE 收到無法辨識的訊息。
WEAVE_ERROR_TIMEOUT 未收到確認或有效性檢查失敗。
WEAVE_ERROR_INCORRECT_STATE 訊息在未預期的情況下接收。
WEAVE_ERROR_STATUS_REPORT_RECEIVED 已收到狀態報告。
WEAVE_ERROR_INVALID_ARGUMENT 訂閱要求欄位無效。

kEvent_OnUpdateComplete

表示更新完成的事件。

事件參數會標出特定特徵路徑的更新成功或失敗。

ResubscribePolicyCallback

void(* ResubscribePolicyCallback)(void *const aAppState, ResubscribeParam &aInParam, uint32_t &aOutIntervalMsec)

回呼,擷取下次重新訂閱前,要等待的時間間隔。

如果應用程式決定放棄重新訂閱,則可以透過這個函式取消/免費。

詳細說明
參數
[in] aAppState
SubscriptionClient 初始化期間設定的應用程式狀態指標。
[in] aInParam
包含重試作業的額外詳細資料
[out] aOutIntervalMsec
等待下次重試的時間 (以毫秒為單位)

公開的靜態函式

DefaultEventHandler

void DefaultEventHandler(
  EventID aEvent,
  const InEventParam & aInParam,
  OutEventParam & aOutParam
)

DefaultResubscribePolicyCallback

void DefaultResubscribePolicyCallback(
  void *const aAppState,
  ResubscribeParam & aInParam,
  uint32_t & aOutIntervalMsec
)

預設政策導入作業會從不斷增加的時段中隨機挑選解析度為毫秒的隨機時段,直到達到 WDM_REsubscribe_MAX_FIBONACCI_STEP_INDEX 為止。

WDM_REsubscribe_MAX_FIBONACCI_STEP_INDEX 之後的隨機等待時間平均值大約是一小時。當重試次數重設為 0 時,序列就會重新開始。

公用函式

AbortSubscription

void AbortSubscription(
  void
)

取消訂閱。

取消用戶端訂閱項目。

立即停止接受與訂閱項目相關的所有流量,並釋出所有基礎通訊資源。SubscriptionClient 物件本身仍有效,且可能會再次使用。

終止訂閱的用戶端,不通知訂閱發布者,也不會將 OnSubscriptionTerminated 事件傳送至應用程式的事件處理常式。如有共同訂閱,系統也會終止計數器訂閱。

呼叫 AbortSubscription() 後,SubscriptionClient 物件會進入 Terminated 狀態。終止程序完成後,物件會進入 Initialized 狀態。這兩種轉換作業都會在對 AbortSubscription() 的呼叫中同步進行。

AbortSubscription() 傳回後,SubscriptionClient 物件可用於啟動其他訂閱,或者呼叫 Free() 方法則可釋放該物件。

ClearUpdated

WEAVE_ERROR ClearUpdated(
  TraitUpdatableDataSink *aDataSink,
  PropertyPathHandle aPropertyHandle
)

DisableResubscribe

void DisableResubscribe(
  void
)

停用重新訂閱機制。

如果重新訂閱尚待處理,系統會取消這項操作。

DiscardUpdates

void DiscardUpdates()

指示 SubscriptionClient 清空待更新的 TraitPath 組合,並取消進行中的更新要求 (如果有的話)。

這個方法可以透過任何回呼叫用。

EnableResubscribe

void EnableResubscribe(
  ResubscribePolicyCallback aCallback
)

啟用自動重新訂閱功能。

請附加回呼,指定下次失敗時的重試時間。

詳細說明
參數
[in] aCallback
選用的回呼,用於擷取失敗後要等待多久才能重試。如果 NULL 使用預設政策。

EndSubscription

WEAVE_ERROR EndSubscription(
  void
)

結束訂閱。

順利結束用戶端訂閱。

啟用 WDM_ENABLE_SUBSCRIPTION_CANCEL 編譯時間選項啟用時,請傳送取消 Request 給對等互連,以順利結束訂閱。系統會在對等互連或逾時時釋出與訂閱項目相關聯的資源。停用選項後,呼叫等同於 AbortSubscription()

順利終止用戶端。如果已啟用訂閱取消支援,系統會將 SubscriptionCancelRequest 訊息傳送給訂閱發布者,系統會在終止訂閱前等待回覆,否則訂閱會以類似 AbortSubscription() 的方式立即終止。如果存在同時訂閱,系統也會終止計數器訂閱。

在等待回應 SubscriptionCancelRequest 時,SubscriptionClient 會進入 Canceling 狀態。

終止程序開始後,SubscriptionClient 物件會進入 Terminated 狀態,並將 OnSubscriptionTerminated 事件傳送至應用程式的事件處理常式。請注意,如果您「沒有」啟用取消支援,則在對 EndSubscription() 的呼叫中,可能會同步呼叫事件處理常式。

應用程式的事件處理常式傳回後,SubscriptionClient 物件會進入 Initialized 狀態。此時,SubscriptionClient 物件可能會用於啟動其他訂閱,或透過呼叫 Free() 方法釋出該物件。

FlushUpdate

WEAVE_ERROR FlushUpdate()

表示應用程式已完成所有 TraitUpdatableDataSinks 異動的信號。

除非先前的更新交換作業正在進行中,否則用戶端會接收標示為已更新的所有資料,並透過一項更新要求傳送給作答者。這個方法可以從任何執行緒呼叫。

詳細說明
參數
[in] aForce
如果為 true,即使日後已排定重試,也會立即傳送更新。根據預設,系統會將這個參數視為 false。
傳回
失敗時則為 WEAVE_NO_ERROR;失敗的其他 WEAVE_ERROR 代碼。

FlushUpdate

WEAVE_ERROR FlushUpdate(
  bool aForce
)

免費

void Free(
  void
)

釋出這個 SubscriptionClient 物件。

釋放 SubscriptionClient 物件。

視需要呼叫 AbortSubscription(),並釋放這個 SubscriptionClient 物件的參照。在正確使用下,應該可以使物件傳回物件集區

釋放 SubscriptionClient 物件。如果訂閱項目已啟用或正在進行中,就會立即終止訂閱,方法與呼叫 AbortSubscription() 類似。如有任何正在處理的更新要求,同樣也會取消。

SubscriptionClient 物件的生命週期內,應用程式負責僅呼叫 Free() 一次。呼叫 Free() 後,不應再對物件做出進一步參照。

GetBinding

Binding * GetBinding(
  void
) const 

GetLivenessTimeoutMsec

uint32_t GetLivenessTimeoutMsec(
  void
) const 

GetPeerNodeId

uint64_t GetPeerNodeId(
  void
) const 

GetSubscriptionId

WEAVE_ERROR GetSubscriptionId(
  uint64_t *const apSubscriptionId
)

IndicateActivity

void IndicateActivity(
  void
)

InitiateCounterSubscription

void InitiateCounterSubscription(
  const uint32_t aLivenessTimeoutSec
)

InitiateSubscription

void InitiateSubscription(
  void
)

SubscriptionClient 設為發起者 (而非計數器訂閱者),並在沒有訂閱項目的情況下啟動。

IsCanceling

bool IsCanceling() const 

IsEstablished

bool IsEstablished()

IsEstablishedIdle

bool IsEstablishedIdle()

IsFree

bool IsFree()

IsInProgressOrEstablished

bool IsInProgressOrEstablished()

IsInResubscribeHoldoff

bool IsInResubscribeHoldoff()

IsRetryEnabled

bool IsRetryEnabled()

IsTerminated

bool IsTerminated()

IsUpdatePendingOrInProgress

bool IsUpdatePendingOrInProgress()

LockUpdateMutex

void LockUpdateMutex(
  void
)

OnCatalogChanged

void OnCatalogChanged()

如果 TraitDataSink 目錄經過修改,則應呼叫這個方法。

ResetResubscribe

void ResetResubscribe(
  void
)

啟動重新訂閱機制。

這會立即開始重試

SetLivenessTimeoutMsec

void SetLivenessTimeoutMsec(
  uint32_t val
)

SetUpdated

WEAVE_ERROR SetUpdated(
  TraitUpdatableDataSink *aDataSink,
  PropertyPathHandle aPropertyHandle,
  bool aIsConditional
)

SuspendUpdateRetries

void SuspendUpdateRetries()

指示 SubscriptionClient 停止重試更新要求。

允許應用程式暫停一段時間內更新,而不捨棄所有中繼資料。呼叫 FlushUpdate 後,系統會繼續更新和重試。當系統呼叫在執行更新期間暫停更新時,不會取消更新。如果更新失敗,必須等到再次呼叫 FlushUpdate,才會重試更新。

UnlockUpdateMutex

void UnlockUpdateMutex(
  void
)