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 清空待更新的 TraitPaths 集,并中止正在进行的更新请求(如果有)。
EnableResubscribe(ResubscribePolicyCallback aCallback)
void
启用自动重新订阅功能。
EndSubscription(void)
终止订阅。
FlushUpdate()
表明应用已完成所有 TraitUpdatableDataSink 的更改。
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

当引擎准备好发送 SubscribeRequest 时发送。

应用应填充其想要订阅的路径。

kEvent_OnSubscriptionActivity

表示订阅活动的事件。

每当客户端收到有关订阅活动的指示(包括成功建立订阅、收到 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_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX 的斐波那契数列,在不断增加的窗口中选择一个分辨率为毫秒的随机时段。

超过 WDM_RESUBSCRIBE_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 清空待更新的 TraitPaths 集,并中止正在进行的更新请求(如果有)。

此方法可通过任何回调调用。

EnableResubscribe

void EnableResubscribe(
  ResubscribePolicyCallback aCallback
)

启用自动重新订阅功能。

附加回调,以指定失败时的下一次重试时间。

具体说明
参数
[in] aCallback
用于提取失败后重试之前等待的时间的可选回调函数。如果为 NULL,则使用默认政策。

EndSubscription

WEAVE_ERROR EndSubscription(
  void
)

终止订阅。

正常结束客户端订阅。

启用 WDM_ENABLE_SUBSCRIPTION_CANCEL 编译时选项后,通过向对等方发送 CancelRequest 来妥善终止订阅。与订阅关联的资源会在对等方响应或超时时释放。当此选项被停用时,调用等同于 AbortSubscription()

正常终止客户端订阅。如果启用了订阅取消支持,则向订阅发布者发送 SubscribeCancelRequest 消息,并且在终止订阅之前系统会等待回复;否则,系统会按照与 AbortSubscription() 类似的方式立即终止订阅。如果存在相互订阅,则同时终止计数器订阅。

在等待 SubscribeCancelRequest 响应时,SubscriptionClient 会进入 Canceling 状态。

终止流程开始后,SubscriptionClient 对象会进入 Terminated 状态,并且 OnSubscriptionTerminated 事件会传递到应用的事件处理脚本。请注意,如果未启用取消支持,则事件处理脚本可能会在 EndSubscription() 调用中同步调用。

应用的事件处理脚本返回后,SubscriptionClient 对象会进入 Initialized 状态。此时,您可以使用 SubscriptionClient 对象发起另一订阅,也可以通过调用 Free() 方法来释放该对象。

FlushUpdate

WEAVE_ERROR FlushUpdate()

表明应用已完成所有 TraitUpdatableDataSink 的更改。

除非之前的更新交换正在进行,否则客户端将获取所有标记为“已更新”的数据,并在一个更新请求中将其发送给响应者。可从任何线程调用此方法。

具体说明
参数
[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
)