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
记录特定联系人的通信错误,并根据需要缩短自动发现期限。Contact 可以为 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)
为 Client 角色初始化。
_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

与特定联系人的通信状态。

这是公开的,因为 Contact 是公开的

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

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

这是公开的,因为 Contact 是公开的

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 以指示服务器始终同步(初始不可靠时间除外)。对于协调器,应设置为 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
)

无论服务处于何种角色,都请停止该服务。

必须调用此函数以正确回收已分配的资源,然后才能再次调用任何初始化函数。在回调中不可用。

具体说明
返回值
成功时返回 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
数组 aNodes 中的联系人数量
[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
)

记录特定联系人的通信错误,并根据需要缩短自动发现期限。Contact 可以为 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
)

为 Client 角色初始化。

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

具体说明
参数
[in] aEncryptionType
要用于请求和响应的加密类型
[in] aKeyId
要用于请求和响应的密钥 ID
[in] aInitialLikelyhood
用于发现阶段的初始可能性
返回值
成功时返回 WEAVE_NO_ERROR

_InitServer

WEAVE_ERROR _InitServer(
  const bool aIsAlwaysFresh
)

为服务器角色初始化。

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

具体说明
参数
[in] aIsAlwaysFresh
可以设置为 true 以指示服务器始终同步(初始不可靠时间除外)。对于协调器,应设置为 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。

_同步成功

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