nl::Weave::Profiles::Time::TimeSyncNode

摘要

继承

沿用自: nl::Weave::Profiles::Time::_TimeSyncNodeBase

构造函数和析构函数

TimeSyncNode(void)
mBootTimeForNextAutoDiscovery_usec
timesync_t
mIsAutoSyncEnabled
bool
自动同步功能使用的状态。
mIsUrgentDiscoveryPending
bool
mNominalDiscoveryPeriod_msec
int32_t
mShortestDiscoveryPeriod_msec
int32_t
mSyncPeriod_msec
int32_t
mActiveContact
沟通情境。
mExchangeContext
mUnadjTimestampLastSent_usec
timesync_t
EnterState_Discover(void)
void
这些状态转换函数是内部函数,无法返回错误代码,因为先前的状态无法处理。
EnterState_ServiceSync_1(void)
void
EnterState_ServiceSync_2(void)
void
EnterState_Sync_1(void)
void
EnterState_Sync_2(void)
void

公共类型

ClientState 枚举
此时间同步客户端的当前状态
CommState 枚举
特定联系人的通信状态。
ContributorFilter)(void *const aApp, Contact aContact[], const int aSize) typedef
void(*
回调发生在我们计算响应的时间校正之前。
OnSyncRequestReceivedHandler)(void *const aApp, const WeaveMessageInfo *aMsgInfo, const uint8_t aLikelyhood, const bool aIsTimeCoordinator) typedef
bool(*
回调以表示我们刚刚收到时间同步请求。
ResponseStatus 枚举
存储响应特定联系人的状态。
ServerState{
  kServerState_UnreliableAfterBoot,
  kServerState_Idle
}
枚举
此时间同步服务器的当前状态
SyncFailedHandler)(void *const aApp, const WEAVE_ERROR aErrorCode) typedef
void(*
回调(包括自动同步)的事件。
SyncSucceededHandler)(void *const aApp, const timesync_t aOffsetUsec, const bool aIsReliable, const bool aIsServer, const uint8_t aNumContributor) typedef
bool(*
回调会在被视为成功同步(包括自动同步)之后到应用结果之前发生。
TimeChangeNotificationHandler)(void *const aApp, const uint64_t aNodeId, const IPAddress &aNodeAddr) typedef
void(*
回调以表示我们刚刚收到时间更改通知。

公共属性

FilterTimeCorrectionContributor
OnSyncFailed
OnSyncRequestReceived
如果未设置,则默认实现始终返回 true
OnSyncSucceeded
如果未设置,则默认行为是获取所有结果,服务器校正幅度非常小
OnTimeChangeNotificationReceived
mEncryptionType
uint8_t
本地通信的加密方法
mKeyId
uint16_t
用于本地通信的密钥 ID

受保护的属性

mApp
void *
指向更高层数据的指针
mClientState
mConnectionToService
用于与该服务通信的 TCP 连接。
mContacts[WEAVE_CONFIG_TIME_CLIENT_MAX_NUM_CONTACTS]
mIsAlwaysFresh
bool
mIsInCallback
bool
如果是对更高层的回调,则返回 true
mLastLikelihoodSent
int8_t
mNumContributorInLastLocalSync
uint8_t
mRole
TimeSyncRole
此节点的实际角色。
mServerState
mServiceContact
mTimestampLastCorrectionFromServerOrNtp_usec
timesync_t
请注意,必须是启动时间,因为我们需要补偿睡眠时间
mTimestampLastLocalSync_usec
timesync_t
请注意,必须是启动时间,因为我们需要补偿睡眠时间

公共函数

Abort(void)
强制发动机返回到闲置状态,中止任何正在进行的操作。
DisableAutoSync(void)
void
停用自动同步。
EnableAutoSync(const int32_t aSyncPeriod_msec, const int32_t aNominalDiscoveryPeriod_msec, const int32_t aShortestDiscoveryPeriod_msec)
启用自动同步。
GetCapacityOfContactList(void) const
int
简单 getter,用于获取此引擎配置为存储的最大联系人数
GetClientState(void) const
用于客户端状态的简单 getter
GetNextLikelihood(void) const
int8_t
提取持久化的可能性。
GetServerState(void) const
用于获取服务器状态的简单 getter
InitClient(void *const aApp, WeaveExchangeManager *aExchangeMgr, const uint8_t aEncryptionType, const uint16_t aKeyId, const int8_t aInitialLikelyhood)
初始化此客户端。
InitCoordinator(nl::Weave::WeaveExchangeManager *aExchangeMgr, const uint8_t aEncryptionType, const uint16_t aKeyId, const int32_t aSyncPeriod_msec, const int32_t aNominalDiscoveryPeriod_msec, const int32_t aShortestDiscoveryPeriod_msec)
初始化该协调器。
InitServer(void *const aApp, WeaveExchangeManager *const aExchangeMgr, const bool aIsAlwaysFresh)
如果意图是时间同步服务器,则必须将服务器角色的 initialize 作为对象构建后的第一个函数进行调用。
MulticastTimeChangeNotification(const uint8_t aEncryptionType, const uint16_t aKeyId) const
void
由更高层向多播时间变化通知调用。
RegisterCorrectionFromServerOrNtp(void)
void
由更高层调用,表示我们刚刚与任何服务器或通过某种可靠的方式(如 NTP)完成了一轮时间同步。
RegisterLocalSyncOperation(const uint8_t aNumContributor)
void
由更高层调用,表示我们刚刚与其他本地协调员完成了一轮时间同步。
Shutdown(void)
停止服务,无论其扮演何种角色。
Sync(const bool aForceDiscoverAgain)
使用现有联系人同步。
SyncWithNodes(const int16_t aNumNode, const ServingNode aNodes[])
使用指定的联系人列表进行同步。
SyncWithService(WeaveConnection *const aConnection)
使用指定的 TCP 连接及关联的加密技术和密钥 ID 进行同步。

受保护的函数

AbortOnError(const WEAVE_ERROR aCode)
void
如果 aCode 不是 WEAVE_NO_ERROR,则内部中止
AutoSyncNow(void)
void
用于启动自动同步会话的内部函数
CallbackForSyncCompletion(const bool aIsSuccessful, bool aShouldUpdate, const bool aIsCorrectionReliable, const bool aIsFromServer, const uint8_t aNumContributor, const timesync_t aSystemTimestamp_usec, const timesync_t aDiffTime_usec)
对应用层执行回调。
ClearState(void)
void
DestroyCommContext(void)
bool
关闭 Weave ExchangeContext
EndLocalSyncAndTryCalculateTimeFix(void)
void
EndServiceSyncAndTryCalculateTimeFix(void)
void
FindReplaceableContact(const uint64_t aNodeId, const IPAddress & aNodeAddr, bool aIsTimeChangeNotification)
返回用于存储联系信息的槽位
GetClientStateName(void) const
const char *const
GetNextIdleContact(void)
获取下一个要与之交谈的有效和空闲联系人
GetNumNotYetCompletedContacts(void)
int16_t
获取有效的联系人数量,但我们尚未与他们联系。
GetNumReliableResponses(void)
int16_t
获取“可靠”数量个回复。
InitState(const TimeSyncRole aRole, void *const aApp, WeaveExchangeManager *const aExchangeMgr)
InvalidateAllContacts(void)
void
使所有本地联系人失效
InvalidateServiceContact(void)
void
使该服务的联系人失效
RegisterCommError(Contact *const aContact)
void
针对特定联系人注册通信错误,并视需要缩短自动发现期限。联系人可以为 NULL,以表示没有人可以交谈,从而缩短自动发现期限
SendSyncRequest(bool *const rIsMessageSent, Contact *const aContact)
向联系人发送单播同步请求。
SetAllCompletedContactsToIdle(void)
int16_t
再次将所有已完成的联系人重置为闲置状态,但不要触碰回复。
SetAllValidContactsToIdleAndInvalidateResponse(void)
int16_t
将所有有效的本地联系人设置为空闲状态并清除响应。
SetClientState(const ClientState state)
void
SetupUnicastCommContext(Contact *const aContact)
创建新的 Weave Exchange 以进行单播通信
StoreNotifyingContact(const uint64_t aNodeId, const IPAddress & aNodeAddr)
void
存储刚刚向我们发送时间更改通知的节点的联系信息
UpdateMulticastSyncResponse(const uint64_t aNodeId, const IPAddress & aNodeAddr, const TimeSyncResponse & aResponse)
void
处理从多播请求返回的响应
UpdateUnicastSyncResponse(const TimeSyncResponse & aResponse)
void
处理从单播请求返回的响应
_InitClient(const uint8_t aEncryptionType, const uint16_t aKeyId, const int8_t aInitialLikelyhood)
初始化。
_InitServer(const bool aIsAlwaysFresh)
初始化。
_ShutdownClient(void)
停止回调中不可用的客户端。
_ShutdownCoordinator(void)
停止回调中不可用的协调器。
_ShutdownServer(void)
停止在回调中不可用的服务器。

受保护的静态函数

HandleAutoDiscoveryTimeout(System::Layer *aSystemLayer, void *aAppState, System::Error aError)
void
HandleAutoSyncTimeout(System::Layer *aSystemLayer, void *aAppState, System::Error aError)
void
HandleMulticastResponseTimeout(System::Layer *aSystemLayer, void *aAppState, System::Error aError)
void
HandleMulticastSyncResponse(ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
void
HandleSyncRequest(ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
void
收到时间同步请求时从 Weave Exchange 中回调
HandleTimeChangeNotification(ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
void
HandleUnicastResponseTimeout(ExchangeContext *const ec)
void
HandleUnicastSyncResponse(ExchangeContext *ec, const IPPacketInfo *pktInfo, const WeaveMessageInfo *msgInfo, uint32_t profileId, uint8_t msgType, PacketBuffer *payload)
void
HandleUnreliableAfterBootTimer(System::Layer *aSystemLayer, void *aAppState, System::Error aError)
void
当我们传递了不可靠的启动屏障后,来自 Weave Timer 的回调
IsOperationalState(ClientState aState)
bool
确定给定状态是否可运行。
_OnSyncSucceeded(void *const aApp, const nl::Weave::Profiles::Time::timesync_t aOffsetUsec, const bool aIsReliable, const bool aIsServer, const uint8_t aNumContributor)
bool

mBootTimeForNextAutoDiscovery_usec

timesync_t mBootTimeForNextAutoDiscovery_usec

mIsAutoSyncEnabled

bool mIsAutoSyncEnabled

自动同步功能使用的状态。

mIsUrgentDiscoveryPending

bool mIsUrgentDiscoveryPending

mNominalDiscoveryPeriod_msec

int32_t mNominalDiscoveryPeriod_msec

mShortestDiscoveryPeriod_msec

int32_t mShortestDiscoveryPeriod_msec

mSyncPeriod_msec

int32_t mSyncPeriod_msec

mActiveContact

Contact * mActiveContact

沟通情境。

mExchangeContext

ExchangeContext * mExchangeContext

mUnadjTimestampLastSent_usec

timesync_t mUnadjTimestampLastSent_usec

EnterState_Discover

void EnterState_Discover(
  void
)

这些状态转换函数是内部函数,无法返回错误代码,因为先前的状态无法处理。

任何失败最终都应导致另一个状态转换(可能是超时);即使计时器失败,我们也会出局,可能卡在某个错误的状态

EnterState_ServiceSync_1

void EnterState_ServiceSync_1(
  void
)

EnterState_ServiceSync_2

void EnterState_ServiceSync_2(
  void
)

EnterState_Sync_1

void EnterState_Sync_1(
  void
)

EnterState_Sync_2

void EnterState_Sync_2(
  void
)

公共类型

ClientState

 ClientState

此时间同步客户端的当前状态

CommState

 CommState

特定联系人的通信状态。

这是公开的,因为联系信息是公开的

ContributorFilter

void(* ContributorFilter)(void *const aApp, Contact aContact[], const int aSize)

回调发生在我们计算响应的时间校正之前。

应用层可以将 aContact[i].mResponseStatus 重写为 kResponseStatus_Invalid,以便在计算时忽略响应

详细信息
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aContact
联系人和回复状态的数组
[in] aSize
aContact 数组中的记录数

OnSyncRequestReceivedHandler

bool(* OnSyncRequestReceivedHandler)(void *const aApp, const WeaveMessageInfo *aMsgInfo, const uint8_t aLikelyhood, const bool aIsTimeCoordinator)

回调以表示我们刚刚收到时间同步请求。

详细信息
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aMsgInfo
WeaveMessageInfo,包含有关已接收时间同步请求的信息,其中包括发送者的相关信息。
[in] aLikelyhood
响应的可能性
[in] aIsTimeCoordinator
如果源节点是时间同步协调器,则为 true
返回值
false,则引擎应忽略此请求

ResponseStatus

 ResponseStatus

存储响应特定联系人的状态。

这是公开的,因为联系信息是公开的

ServerState

 ServerState

此时间同步服务器的当前状态

属性
kServerState_Idle

服务器已准备好以常规设置响应请求

kServerState_UnreliableAfterBoot

为服务器预留的时间,以便通过一些其他方式同步其系统时间,仅当调用 Init 时 aIsAlwaysFresh 为 true 时才有意义

SyncFailedHandler

void(* SyncFailedHandler)(void *const aApp, const WEAVE_ERROR aErrorCode)

回调(包括自动同步)的事件。

请注意,如果调用 Abort 以停止同步,则不会发生回调。

详细信息
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aErrorCode
失败原因

SyncSucceededHandler

bool(* SyncSucceededHandler)(void *const aApp, const timesync_t aOffsetUsec, const bool aIsReliable, const bool aIsServer, const uint8_t aNumContributor)

回调会在被视为成功同步(包括自动同步)之后到应用结果之前发生。

请注意,成功并不意味着我们有适用的结果。如果未收到响应,则 aNumContributor 会被设为 0。应用层可能会将 aContact[i].mResponseStatus 覆盖为 kResponseStatus_Invalid,以便在计算时忽略响应

详细信息
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aOffsetUsec
校正量(以微秒为单位)
[in] aIsReliable
内置逻辑认为更正内容是否可靠
[in] aIsServer
更正内容是否来自服务器
[in] aNumContributor
影响此更正的节点数量。0 表示同步操作没有结果。
返回值
如果应使用该偏移量调整系统时间,则为 true。如果 aNumContributor 为 0,系统会忽略返回值。

TimeChangeNotificationHandler

void(* TimeChangeNotificationHandler)(void *const aApp, const uint64_t aNodeId, const IPAddress &aNodeAddr)

回调以表示我们刚刚收到时间更改通知。

如果启用了自动同步模式,则在此回调之后不久,系统就会自动安排时间同步。否则,应用层可以选择调用 Sync 系列函数,以直接启动同步操作,而不受一般“不可用回调”规则的限制。但必须注意,此特殊回调仍位于 Weave 交换层的回调堆栈之上。

详细信息
参数
[in] aApp
指向应用层数据的指针,在 Init 中设置。
[in] aNodeId
发出请求的节点 ID
[in] aNodeAddr
请求节点地址

公共属性

FilterTimeCorrectionContributor

ContributorFilter FilterTimeCorrectionContributor

OnSyncFailed

SyncFailedHandler OnSyncFailed

OnSyncRequestReceived

OnSyncRequestReceivedHandler OnSyncRequestReceived

如果未设置,则默认实现始终返回 true

OnSyncSucceeded

SyncSucceededHandler OnSyncSucceeded

如果未设置,则默认行为是获取所有结果,服务器校正幅度非常小

OnTimeChangeNotificationReceived

TimeChangeNotificationHandler OnTimeChangeNotificationReceived

mEncryptionType

uint8_t mEncryptionType

本地通信的加密方法

mKeyId

uint16_t mKeyId

用于本地通信的密钥 ID

受保护的属性

mApp

void * mApp

指向更高层数据的指针

mClientState

ClientState mClientState

mConnectionToService

WeaveConnection * mConnectionToService

用于与该服务通信的 TCP 连接。

mContacts

Contact mContacts[WEAVE_CONFIG_TIME_CLIENT_MAX_NUM_CONTACTS]

mIsAlwaysFresh

bool mIsAlwaysFresh

mIsInCallback

bool mIsInCallback

如果是对更高层的回调,则返回 true

mLastLikelihoodSent

int8_t mLastLikelihoodSent

mNumContributorInLastLocalSync

uint8_t mNumContributorInLastLocalSync

mRole

TimeSyncRole mRole

此节点的实际角色。

mServerState

ServerState mServerState

mServiceContact

Contact mServiceContact

mTimestampLastCorrectionFromServerOrNtp_usec

timesync_t mTimestampLastCorrectionFromServerOrNtp_usec

请注意,必须是启动时间,因为我们需要补偿睡眠时间

mTimestampLastLocalSync_usec

timesync_t mTimestampLastLocalSync_usec

请注意,必须是启动时间,因为我们需要补偿睡眠时间

公共函数

中止

WEAVE_ERROR Abort(
  void
)

强制发动机返回到闲置状态,中止任何正在进行的操作。

请注意,系统不会调用同步成功或失败。所有 Weave Exchange 都将被关闭。不会再涉及 TCP 连接。如果我们已经处于空闲状态,则不会执行任何操作。在回调中不可用。

详细信息
返回值
成功时返回 WEAVE_NO_ERROR

DisableAutoSync

void DisableAutoSync(
  void
)

停用自动同步。

只有在空闲状态下可用在回调中不可用。

EnableAutoSync

WEAVE_ERROR EnableAutoSync(
  const int32_t aSyncPeriod_msec,
  const int32_t aNominalDiscoveryPeriod_msec,
  const int32_t aShortestDiscoveryPeriod_msec
)

启用自动同步。

只有在空闲状态下可用可以立即进行发现。在回调中不可用。

详细信息
参数
[in] aSyncPeriod_msec
两次同步操作之间的毫秒数
[in] aNominalDiscoveryPeriod_msec
发现之间的间隔毫秒数(如果未观察到通信错误)
[in] aShortestDiscoveryPeriod_msec
发现之间的最短时间(以毫秒为单位,如果已观察到通信错误)
返回值
成功时返回 WEAVE_NO_ERROR

GetCapacityOfContactList

int GetCapacityOfContactList(
  void
) const 

简单 getter,用于获取此引擎配置为存储的最大联系人数

GetClientState

ClientState GetClientState(
  void
) const 

用于客户端状态的简单 getter

GetNextLikelihood

int8_t GetNextLikelihood(
  void
) const 

提取持久化的可能性。

结果仅在同步操作完成后才在 OnSyncSucceeded 和 OnSyncFailed 回调内有效。否则它是瞬态的,并且可能是当前可能性,而不是下一个可能性。

详细信息
返回值
响应被用于下一个请求的可能性

GetServerState

ServerState GetServerState(
  void
) const 

用于获取服务器状态的简单 getter

InitClient

WEAVE_ERROR InitClient(
  void *const aApp,
  WeaveExchangeManager *aExchangeMgr,
  const uint8_t aEncryptionType,
  const uint16_t aKeyId,
  const int8_t aInitialLikelyhood
)

初始化此客户端。

在回调中不可用

详细信息
参数
[in] aApp
指向更高层数据的指针,用于对更高层的回调。
[in] aExchangeMgr
指向系统级 Weave Exchange Manager 对象的指针
[in] aRole
可以是 kTimeSyncRole_Client 或 kTimeSyncRole_Coordinator
[in] aEncryptionType
用于请求和响应的加密类型
[in] aKeyId
用于请求和响应的密钥 ID
[in] aInitialLikelyhood
最初用于发现阶段的可能性
返回值
成功时返回 WEAVE_NO_ERROR

InitCoordinator

WEAVE_ERROR InitCoordinator(
  nl::Weave::WeaveExchangeManager *aExchangeMgr,
  const uint8_t aEncryptionType,
  const uint16_t aKeyId,
  const int32_t aSyncPeriod_msec,
  const int32_t aNominalDiscoveryPeriod_msec,
  const int32_t aShortestDiscoveryPeriod_msec
)

初始化该协调器。

详细信息
参数
[in] aExchangeMgr
指向系统级 Weave Exchange Manager 对象的指针
[in] aEncryptionType
用于请求和响应的加密类型
[in] aKeyId
用于请求和响应的密钥 ID
[in] aSyncPeriod_msec
两次同步操作之间的毫秒数
[in] aNominalDiscoveryPeriod_msec
发现之间的最短时间(以毫秒为单位,如果未观察到通信错误)
[in] aShortestDiscoveryPeriod_msec
发现之间的最短毫秒数(如果观察到通信错误)
返回值
成功时返回 WEAVE_NO_ERROR

InitServer

WEAVE_ERROR InitServer(
  void *const aApp,
  WeaveExchangeManager *const aExchangeMgr,
  const bool aIsAlwaysFresh
)

如果意图是时间同步服务器,则必须将服务器角色的 initialize 作为对象构建后的第一个函数进行调用。

在回调中不可用

详细信息
参数
[in] aApp
指向更高层数据的指针,用于对更高层的回调。
[in] aExchangeMgr
指向系统级 Weave Exchange Manager 对象的指针
[in] aIsAlwaysFresh
可设置为 true,以指示除了初始不可靠时间以外,始终对服务器进行同步。对于 Coordinator,应设置为 false。
返回值
成功时返回 WEAVE_NO_ERROR

MulticastTimeChangeNotification

void MulticastTimeChangeNotification(
  const uint8_t aEncryptionType,
  const uint16_t aKeyId
) const 

由更高层向多播时间变化通知调用。

在回调中不可用。

详细信息
参数
[in] aEncryptionType
要用于此通知的加密类型
[in] aKeyId
要用于此通知的键 ID

RegisterCorrectionFromServerOrNtp

void RegisterCorrectionFromServerOrNtp(
  void
)

由更高层调用,表示我们刚刚与任何服务器或通过某种可靠的方式(如 NTP)完成了一轮时间同步。

RegisterLocalSyncOperation

void RegisterLocalSyncOperation(
  const uint8_t aNumContributor
)

由更高层调用,表示我们刚刚与其他本地协调员完成了一轮时间同步。

详细信息
参数
[in] aNumContributor
为本次时间同步做出贡献的协调员人数

关停

WEAVE_ERROR Shutdown(
  void
)

停止服务,无论其扮演何种角色。

在再次调用任何 init 函数之前,必须调用此函数以正确回收分配的资源。在回调中不可用。

详细信息
返回值
成功时返回 WEAVE_NO_ERROR

同步

WEAVE_ERROR Sync(
  const bool aForceDiscoverAgain
)

使用现有联系人同步。

如果没有有效的联系人,同步操作可能会失败。将 aForceDiscoverAgain 设置为 true 以立即强制发现。只有在空闲状态下可用在回调中不可用。

详细信息
参数
[in] aForceDiscoverAgain
如果应清空所有现有联系人并执行发现操作,则为 true
返回值
成功时返回 WEAVE_NO_ERROR

SyncWithNodes

WEAVE_ERROR SyncWithNodes(
  const int16_t aNumNode,
  const ServingNode aNodes[]
)

使用指定的联系人列表进行同步。

会刷新现有联系人列表。只有在空闲状态下可用在回调中不可用。

详细信息
参数
[in] aNumNode
数组 aNode 中的联系人数量
[in] aNodes
一组联系人记录
返回值
成功时返回 WEAVE_NO_ERROR

SyncWithService

WEAVE_ERROR SyncWithService(
  WeaveConnection *const aConnection
)

使用指定的 TCP 连接及关联的加密技术和密钥 ID 进行同步。

同步完成后,调用方必须获得 TCP 连接的所有权。TCP 连接不会覆盖任何回调,因为系统会创建新的 Weave Exchange,并且基于该上下文设置的回调仅在空闲状态下可用。在回调中不可用。

详细信息
参数
[in] aConnection
指向 Weave 连接的指针
返回值
成功时返回 WEAVE_NO_ERROR

TimeSyncNode

 TimeSyncNode(
  void
)

受保护的函数

AbortOnError

void AbortOnError(
  const WEAVE_ERROR aCode
)

如果 aCode 不是 WEAVE_NO_ERROR,则内部中止

AutoSyncNow

void AutoSyncNow(
  void
)

用于启动自动同步会话的内部函数

CallbackForSyncCompletion

WEAVE_ERROR CallbackForSyncCompletion(
  const bool aIsSuccessful,
  bool aShouldUpdate,
  const bool aIsCorrectionReliable,
  const bool aIsFromServer,
  const uint8_t aNumContributor,
  const timesync_t aSystemTimestamp_usec,
  const timesync_t aDiffTime_usec
)

对应用层执行回调。

将 aIsSuccessful 设置为 false 以引发错误回调

ClearState

void ClearState(
  void
)

DestroyCommContext

bool DestroyCommContext(
  void
)

关闭 Weave ExchangeContext

EndLocalSyncAndTryCalculateTimeFix

void EndLocalSyncAndTryCalculateTimeFix(
  void
)

EndServiceSyncAndTryCalculateTimeFix

void EndServiceSyncAndTryCalculateTimeFix(
  void
)

FindReplaceableContact

Contact * FindReplaceableContact(
  const uint64_t aNodeId,
  const IPAddress & aNodeAddr,
  bool aIsTimeChangeNotification
)

返回用于存储联系信息的槽位

GetClientStateName

const char *const GetClientStateName(
  void
) const 

GetNextIdleContact

Contact * GetNextIdleContact(
  void
)

获取下一个可与之交谈的有效和空闲联系人

GetNumNotYetCompletedContacts

int16_t GetNumNotYetCompletedContacts(
  void
)

获取有效的联系人数量,但我们尚未与他们联系。

GetNumReliableResponses

int16_t GetNumReliableResponses(
  void
)

获取“可靠”数量个回复。

调用以确定我们已收集到足够数量的回复

InitState

WEAVE_ERROR InitState(
  const TimeSyncRole aRole,
  void *const aApp,
  WeaveExchangeManager *const aExchangeMgr
)

InvalidateAllContacts

void InvalidateAllContacts(
  void
)

使所有本地联系人失效

InvalidateServiceContact

void InvalidateServiceContact(
  void
)

使该服务的联系人失效

RegisterCommError

void RegisterCommError(
  Contact *const aContact
)

针对特定联系人注册通信错误,并视需要缩短自动发现期限。联系人可以为 NULL,以表示没有人可以交谈,从而缩短自动发现期限

SendSyncRequest

WEAVE_ERROR SendSyncRequest(
  bool *const rIsMessageSent,
  Contact *const aContact
)

向联系人发送单播同步请求。

*rIsMessageSent 将设置以指示消息是否已发出。不会返回地址无法访问等通信错误,因此调用方应同时检查返回代码和 *rIsMessageSent。

SetAllCompletedContactsToIdle

int16_t SetAllCompletedContactsToIdle(
  void
)

再次将所有已完成的联系人重置为闲置状态,但不要触碰回复。

这称为在与同一节点的两轮通信的

SetAllValidContactsToIdleAndInvalidateResponse

int16_t SetAllValidContactsToIdleAndInvalidateResponse(
  void
)

将所有有效的本地联系人设置为空闲状态并清除响应。

在我们开始逐一联系他们之前,会调用此方法

SetClientState

void SetClientState(
  const ClientState state
)

SetupUnicastCommContext

WEAVE_ERROR SetupUnicastCommContext(
  Contact *const aContact
)

创建新的 Weave Exchange 以进行单播通信

StoreNotifyingContact

void StoreNotifyingContact(
  const uint64_t aNodeId,
  const IPAddress & aNodeAddr
)

存储刚刚向我们发送时间更改通知的节点的联系信息

UpdateMulticastSyncResponse

void UpdateMulticastSyncResponse(
  const uint64_t aNodeId,
  const IPAddress & aNodeAddr,
  const TimeSyncResponse & aResponse
)

处理从多播请求返回的响应

UpdateUnicastSyncResponse

void UpdateUnicastSyncResponse(
  const TimeSyncResponse & aResponse
)

处理从单播请求返回的响应

_InitClient

WEAVE_ERROR _InitClient(
  const uint8_t aEncryptionType,
  const uint16_t aKeyId,
  const int8_t aInitialLikelyhood
)

初始化。

旨在供 Init 系列的公共函数在内部使用。必须在返回前设置 mClientState。在回调中不可用

详细信息
参数
[in] aEncryptionType
用于请求和响应的加密类型
[in] aKeyId
用于请求和响应的密钥 ID
[in] aInitialLikelyhood
最初用于发现阶段的可能性
返回值
成功时返回 WEAVE_NO_ERROR

_InitServer

WEAVE_ERROR _InitServer(
  const bool aIsAlwaysFresh
)

初始化。

旨在供 Init 系列的公共函数在内部使用。必须在返回前设置 mClientState。在回调中不可用

详细信息
参数
[in] aIsAlwaysFresh
可设置为 true,以指示除了初始不可靠时间以外,始终对服务器进行同步。对于 Coordinator,应设置为 false。
返回值
成功时返回 WEAVE_NO_ERROR

_ShutdownClient

WEAVE_ERROR _ShutdownClient(
  void
)

停止回调中不可用的客户端。

详细信息
返回值
成功时返回 WEAVE_NO_ERROR

_ShutdownCoordinator

WEAVE_ERROR _ShutdownCoordinator(
  void
)

停止回调中不可用的协调器。

详细信息
返回值
成功时返回 WEAVE_NO_ERROR

_ShutdownServer

WEAVE_ERROR _ShutdownServer(
  void
)

停止在回调中不可用的服务器。

详细信息
返回值
成功时返回 WEAVE_NO_ERROR

受保护的静态函数

HandleAutoDiscoveryTimeout

void HandleAutoDiscoveryTimeout(
  System::Layer *aSystemLayer,
  void *aAppState,
  System::Error aError
)

HandleAutoSyncTimeout

void HandleAutoSyncTimeout(
  System::Layer *aSystemLayer,
  void *aAppState,
  System::Error aError
)

HandleMulticastResponseTimeout

void HandleMulticastResponseTimeout(
  System::Layer *aSystemLayer,
  void *aAppState,
  System::Error aError
)

HandleMulticastSyncResponse

void HandleMulticastSyncResponse(
  ExchangeContext *ec,
  const IPPacketInfo *pktInfo,
  const WeaveMessageInfo *msgInfo,
  uint32_t profileId,
  uint8_t msgType,
  PacketBuffer *payload
)

HandleSyncRequest

void HandleSyncRequest(
  ExchangeContext *ec,
  const IPPacketInfo *pktInfo,
  const WeaveMessageInfo *msgInfo,
  uint32_t profileId,
  uint8_t msgType,
  PacketBuffer *payload
)

收到时间同步请求时从 Weave Exchange 中回调

HandleTimeChangeNotification

void HandleTimeChangeNotification(
  ExchangeContext *ec,
  const IPPacketInfo *pktInfo,
  const WeaveMessageInfo *msgInfo,
  uint32_t profileId,
  uint8_t msgType,
  PacketBuffer *payload
)

HandleUnicastResponseTimeout

void HandleUnicastResponseTimeout(
  ExchangeContext *const ec
)

HandleUnicastSyncResponse

void HandleUnicastSyncResponse(
  ExchangeContext *ec,
  const IPPacketInfo *pktInfo,
  const WeaveMessageInfo *msgInfo,
  uint32_t profileId,
  uint8_t msgType,
  PacketBuffer *payload
)

HandleUnreliableAfterBootTimer

void HandleUnreliableAfterBootTimer(
  System::Layer *aSystemLayer,
  void *aAppState,
  System::Error aError
)

当我们传递了不可靠的启动屏障后,来自 Weave Timer 的回调

IsOperationalState

bool IsOperationalState(
  ClientState aState
)

确定给定状态是否可运行。

确定 ClientState 是否表示操作状态的便捷方法,即客户端已完成初始化且未在关闭过程中。

详细信息
参数
[in] aState
要评估的状态
返回值
如果状态在初始化完成后、关停开始之前状态下降,则为 true,否则为 false。

_OnSyncSucceeded

bool _OnSyncSucceeded(
  void *const aApp,
  const nl::Weave::Profiles::Time::timesync_t aOffsetUsec,
  const bool aIsReliable,
  const bool aIsServer,
  const uint8_t aNumContributor
)