nl:: Weave:: Profiles:: DataManagement_Current:: SubscriptionClient
摘要
公共类型 |
|
---|---|
@130
|
枚举 |
EventCallback)(void *const aAppState, EventID aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
|
typedefvoid(*
用于将订阅事件传递给应用的回调。 |
EventID{
|
枚举 |
ResubscribePolicyCallback)(void *const aAppState, ResubscribeParam &aInParam, uint32_t &aOutIntervalMsec)
|
typedefvoid(*
用于提取在下次重新订阅前等待的时间间隔的回调。 |
公共静态函数 |
|
---|---|
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)选择一个随机时间空档,该时段的分辨率会不断增加。
|
结构体 |
|
---|---|
nl:: |
|
nl:: |
联合体 |
|
---|---|
nl:: |
|
nl:: |
公共类型
@130
@130
EventCallback
void(* EventCallback)(void *const aAppState, EventID aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
用于将订阅事件传递给应用的回调。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
EventID
EventID
属性 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kEvent_OnEventStreamReceived
|
当 SubscriptionEngine 在 NotificationRequest 消息中处理事件流时生成。 此时,应用可能会调用 EndSubscription()、AbortSubscription() 或 Free()。 |
||||||||||||
kEvent_OnExchangeStart
|
在准备好绑定并设置 ExchangeContext 之后、发送任何邮件之前生成。 这是应用调整 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 的参数将指明是否会自动尝试重新订阅。 在事件处理脚本调用期间,客户端的状态为 在此状态下,应用可以调用 AbortSubscription() 或 Free()。 发送的参数中还会包含一个错误代码,指示终止订阅的原因。 订阅可能由于多种原因(WRM ACK 缺失、ExchangeContext 分配失败、响应超时等)而被终止客户端生成的一些可能的错误代码:
|
||||||||||||
kEvent_OnUpdateComplete
|
表示更新完成的事件。 事件参数用于指明特定特征路径的更新是否成功。 |
ResubscribePolicyCallback
void(* ResubscribePolicyCallback)(void *const aAppState, ResubscribeParam &aInParam, uint32_t &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 清空待更新的 TraitPath 集,并中止正在进行的更新请求(如果有)。
此方法可以从任何回调调用。
EnableResubscribe
void EnableResubscribe( ResubscribePolicyCallback aCallback )
启用自动重新订阅功能。
附加一个回调,以指定失败时的下次重试时间。
详细信息 | |||
---|---|---|---|
参数 |
|
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 的更改。
除非之前的更新交换仍在进行中,否则客户端将获取标记为“已更新”的所有数据,并通过一个更新请求将其发送给响应者。可以从任何线程调用此方法。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
WEAVE_NO_ERROR(如果成功);其他 WEAVE_ERROR 代码(如果失败)。
|
FlushUpdate
WEAVE_ERROR FlushUpdate( bool aForce )
免费
void Free( void )
释放此 SubscriptionClient 对象。
释放 SubscriptionClient
对象。
如有必要,会调用 AbortSubscription(),并释放此 SubscriptionClient 对象上的 refcount。如果使用正确,对象应该可以返回到对象池
释放 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 )
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 )