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_RELICENSE_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

Structs

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

表示訂閱活動的事件。

當用戶端收到訂閱活動的跡象時,便會產生此 ID。包括成功建立訂閱、接收 NotificationRequest 或接收狀態報告,以便回應 SubscribeConfirm 訊息。

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_RELICENSE_MAX_FIBONACCI_STEP_INDEX) 之後,以毫秒為單位的隨機時段選擇解析度。

WDM_RE 異動_MAX_FIBONACCI_STEP_INDEX 之後的隨機等待時間平均約為 1 小時。當重試次數重設為 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 編譯時間選項時,請傳送 cancelRequest 給對等體,以便安全地結束訂閱。與訂閱項目相關聯的資源會在對等點回應或逾時時釋出。當選項停用時,呼叫等同於 AbortSubscription()

優雅終止用戶端訂閱。如果您已啟用訂閱取消支援,系統會傳送 SubscriptionsCancelRequest 訊息給訂閱發布商,且系統會等候回覆後再終止訂閱。否則系統會立即以類似 AbortSubscription() 的方式終止訂閱項目。如果存在共同訂閱項目,系統也會終止計數器訂閱。

在等待回應 SubscribeCancelRequest 時,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
)