透過集合功能整理內容 你可以依據偏好儲存及分類內容。

nl::Weave::設定檔::DataManagement_Current::PurchaseClient

摘要

公開類型

@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
透過預設的政策實作,您可以挑選連續有 1 毫秒的解析度,且持續到 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::PurchaseClient::LastObservingEvent
nl::Weave::Profiles::DataManagement_Current::PurchaseClient::ResubscribeParam

聯集

nl::Weave::Profiles::DataManagement_Current::PurchaseClient::InEventParam
nl::Weave::Profiles::DataManagement_Current::PurchaseClient::OutEventParam

公開類型

@130

 @130

事件回呼

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

將回呼事件傳送至應用程式的回呼。

詳情
參數
[in] aAppState
在初始化 subscriptionClient 期間設定應用程式狀態指標。
[in] aEvent
表示正在發生的活動
[in] aInParam
附上有關活動的其他細節
[out] aOutParam
應用程式傳回的資訊

活動 ID

 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

在引擎準備傳送 訂閱者請求時傳送。

應用程式預期會填寫其要訂閱的路徑。

kEvent_OnSubscriptionActivity

表示訂閱活動的事件。

每當用戶端收到有關訂閱活動的指示,就會產生這個事件,其中包括成功訂閱建立、收到 NotificationRequest 或收到 訂閱者確認訊息的狀態報告。

kEvent_OnSubscriptionEstablished

系統會在成功建立訂閱項目時產生。

在這個階段,應用程式可能會呼叫 Endsubscription()Abortsubscription()Free()

kEvent_OnSubscriptionTerminated

標示此訂閱項目的結束。

傳送至 nl::Weave::Profiles::DataManagement_Current::PurchaseClient::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

指出更新完成的事件。

事件參數會指出特定特性路徑的更新是成功還是失敗。

重新訂閱政策呼叫

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

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

如果應用程式決定放棄重新訂閱,應用程式即可取消/免費訂閱。

詳情
參數
[in] aAppState
在初始化 subscriptionClient 期間設定應用程式狀態指標。
[in] aInParam
附上有關重試的其他詳細資料
[out] aOutIntervalMsec
下次重試的延遲時間 (毫秒)

公開的靜態函式

預設事件處理常式

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

預設重新訂閱政策呼叫

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

透過預設的政策實作,您可以挑選連續有 1 毫秒的解析度,且持續到 WDM_REsubscribe_MAX_FIBONACCI_STEP_INDEX。

WDM_REsubscribe_MAX_FIBONACCI_STEP_INDEX 結束後的隨機等待時間平均約為一小時。重試次數重設為 0 時,序列會從頭重新開始。

公開函式

取消約期授權

void AbortSubscription(
  void
)

取消約期授權。

取消用戶端訂閱。

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

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

呼叫 Abortsubscription() 時,SubscriptionClient 物件會進入 Terminated 狀態。終止程序完成後,物件會進入 Initialized 狀態。這兩種轉換皆會在呼叫 Abortsubscription() 時同步進行。

Abortsubscription() 傳回後,SubscriptionClient 物件可用於啟動另一個訂閱項目,或者透過呼叫 Free() 方法釋出該物件。

清除更新

WEAVE_ERROR ClearUpdated(
  TraitUpdatableDataSink *aDataSink,
  PropertyPathHandle aPropertyHandle
)

停用重新訂閱

void DisableResubscribe(
  void
)

停用重新訂閱機制。

如果該訂閱待處理,則會取消。

捨棄更新

void DiscardUpdates()

要求 subscriptionClient 清空待更新的 TraitPath 集,並取消進行中的更新要求 (如果有的話)。

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

啟用重新訂閱

void EnableResubscribe(
  ResubscribePolicyCallback aCallback
)

啟用自動重新訂閱。

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

詳情
參數
[in] aCallback
選用回呼,擷取失敗後等待重試的時間。如果為 NULL,則使用預設政策。

結束訂閱

WEAVE_ERROR EndSubscription(
  void
)

結束訂閱。

快速結束用戶端訂閱。

啟用 WDM_ENABLE_SUBSCRIPTION_CANCEL 編譯時間選項後,請傳送取消訂閱要求至對等設備,以安全結束訂閱。與訂閱項目相關聯的資源會在對等點回應時失效或逾時。停用這個選項時,呼叫等同於 Abortsubscription()

安全終止訂閱的用戶端。如果啟用訂閱取消支援,系統會向訂閱發布商傳送 訂閱項目 CancelRequest 訊息,且系統會在終止訂閱前等待回覆,否則訂閱將會立即以類似 Abortsubscription() 的方式終止。如果同時有共同訂閱,計數器訂閱也會遭到終止。

在等待對 BookingCancelRequest 的回應時,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() 之後,就不得再參照物件。

取得繫結

Binding * GetBinding(
  void
) const 

GetLivenessTimeoutMsec

uint32_t GetLivenessTimeoutMsec(
  void
) const 

取得對等節點 ID

uint64_t GetPeerNodeId(
  void
) const 

取得訂閱 ID

WEAVE_ERROR GetSubscriptionId(
  uint64_t *const apSubscriptionId
)

索引活動

void IndicateActivity(
  void
)

啟動計數器訂閱

void InitiateCounterSubscription(
  const uint32_t aLivenessTimeoutSec
)

啟動訂閱

void InitiateSubscription(
  void
)

subscriptionClient 設定為啟動者 (而非計數器訂閱),並在不啟用訂閱項目的情況下啟動訂閱項目。

取消中

bool IsCanceling() const 

已建立

bool IsEstablished()

建立 ID

bool IsEstablishedIdle()

免費

bool IsFree()

仍在進行中或已建立

bool IsInProgressOrEstablished()

IsInResubscribeHoldoff

bool IsInResubscribeHoldoff()

已重試

bool IsRetryEnabled()

已終止

bool IsTerminated()

是待更新或處理中的進度

bool IsUpdatePendingOrInProgress()

鎖定更新靜音

void LockUpdateMutex(
  void
)

OnCatalog 已變更

void OnCatalogChanged()

修改 TraitDataSink 目錄時,應呼叫這個方法。

重設重新訂閱

void ResetResubscribe(
  void
)

啟動重新訂閱機制。

這項操作會立即重試。

SetLivenessTimeoutMsec

void SetLivenessTimeoutMsec(
  uint32_t val
)

已更新

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

SuspensionUpdateRetries

void SuspendUpdateRetries()

要求 subscriptionClient 停止重試更新要求。

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

解除鎖定 Update 座 x

void UnlockUpdateMutex(
  void
)