nl::Weave::Profiles::Echo_Next::WeaveEchoClient

#include <src/lib/profiles/echo/Next/WeaveEchoClient.h>

Provides the ability to send Weave EchoRequest messages to a peer node and receive
the corresponding EchoResponse messages.

摘要

WeaveEchoClient 类可实现 Weave Echo 协议的发起方端。Weave Echo 协议与 ICMP ping 协议类似,可用于测试 Weave 节点的活跃性和可达性。

应用可以使用 WeaveEchoClient 类向由 Binding 对象标识的对等节点发送一次性或重复 EchoRequest 消息。存在响应 echo 请求的类(请参阅 WeaveEchoServer)。

客户端绑定

WeaveEchoClient 接受 Weave Binding 对象,该对象用于标识 echo 请求的目标接收者并与之建立通信。在初始化 WeaveEchoClient 对象之前,应用可以配置和准备 Binding,也可以不准备。在这种情况下,WeaveEchoClient 将请求按需准备绑定(如需了解详情,请参阅 Binding::RequestPrepare())。

如果 Binding 在进入就绪状态后失败,系统还将请求其按需准备。

发送重复模式

SendRepeating() 方法可用于将 WeaveEchoClient 置于 SendRepeating 模式。在此模式下,客户端对象以配置的时间间隔向对等端发送一系列重复的 EchoRequest 消息。通过调用 Stop() 方法,可取消发送重复模式。

多播和广播

WeaveEchoClient 对象可用于将 EchoRequest 同时发送给多个接收者,方法是为 Binding 对象配置适当的 IPv6 多播地址或 IPv4 本地网络广播地址 (255.255.255.255)。当 WeaveEchoClient 对象检测到多播或广播对等地址时,会在发送 EchoRequest 时自动进入多响应模式。

在此模式下,对象会继续监听并传递到达同一交换机的所有传入 EchoResponse 消息。该对象会一直处于多响应模式,直到出现以下情况:1) 应用调用 Stop()Send();2) 在 Send 重复模式下,需要发送另一个请求;或 3) 未收到响应且接收超时已到期。

API 事件

在操作过程中,WeaveEchoClient 对象会调用应用,以请求特定操作或发送重要事件通知。这些 API 事件调用将对客户端对象上当前配置的回调函数进行。除非另有说明,否则应用可在事件回调期间自由更改客户端的状态。一种整体异常是对象的 Shutdown() 方法,在回调期间可能永远不会调用该方法。

定义了以下 API 事件:

PreparePayload

WeaveEchoClient 即将生成 EchoRequest 消息,并请求应用提供有效负载。如果应用需要,它可以返回包含负载数据的新 PacketBuffer。如果应用不处理此事件,系统将自动发送有效负载为零的 EchoRequest。在此回调期间,应用不得更改 WeaveEchoClient 的状态。

RequestSent

向对等端发送了 EchoRequest 消息。

ResponseReceived

从对等端收到了 EchoResponse 消息。该事件的参数包含响应负载和有关响应消息的元信息。

CommunicationError

形成或发送 EchoRequest 时,或在等待响应时发生错误。等待响应期间可能发生的错误示例包括关键错误或意外关闭连接。该事件的参数包含错误原因。

ResponseTimeout

在指定的时间内未收到 EchoResponse。响应超时由 Binding 对象的 DefaultResponseTimeout 属性控制。

RequestAborted

正在进行的 Echo 交换被中止,因为在收到上一条消息的响应之前,系统发出了发送另一个 EchoRequest 的请求。当发送下一个 EchoRequest 的时间到来时,可能会在 Send 重复模式下出现。如果应用在发送 EchoRequest 之后、收到任何响应之前调用 Send(),也会出现上述情况。

当对象处于多响应模式时,如果至少收到了一条 EchoResponse 消息,则系统会禁止事件。

构造函数和析构函数

WeaveEchoClient(void)

公共类型

EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam) typedef
void(*
EventType{
  kEvent_PreparePayload = 1,
  kEvent_RequestSent = 2,
  kEvent_ResponseReceived = 3,
  kEvent_CommunicationError = 4,
  kEvent_ResponseTimeout = 5,
  kEvent_RequestAborted = 6,
  kEvent_DefaultCheck = 100
}
枚举
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
枚举

公共属性

AppState
void *
指向应用特定数据的指针。

公共函数

GetBinding(void) const
返回指向与 WeaveEchoClient 关联的 Binding 对象的指针。
GetEventCallback(void) const
EventCallback
返回一个指针,该指针指向当前在 WeaveEchoClient 对象上配置的 API 事件回调函数。
GetState(void) const
检索 WeaveEchoClient 对象的当前状态。
Init(Binding *binding, EventCallback eventCallback, void *appState)
初始化 WeaveEchoClient 对象。
IsSendRrepeating() const
bool
如果 WeaveEchoClient 对象当前处于发送重复模式,则返回 true。
RequestInProgress() const
bool
如果 EchoRequest 已发送且 WeaveEchoClient 对象正在等待响应,则返回 true。
Send(void)
向对等端发送 EchoRequest 消息。
Send(PacketBuffer *payloadBuf)
向对等端发送具有特定载荷的 EchoRequest 消息。
SendRepeating(uint32_t sendIntervalMS)
开始向对等端发送一系列重复的 EchoRequest 消息。
SetEventCallback(EventCallback eventCallback)
void
WeaveEchoClient 对象上设置 API 事件回调函数。
Shutdown(void)
void
关闭先前初始化的 WeaveEchoClient 对象。
Stop(void)
void
停止任何正在进行的 Echo 交换,并取消重复发送模式。

公共静态函数

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
WeaveEchoClient API 事件的默认处理程序。

结构体

nl::Weave::Profiles::Echo_Next::WeaveEchoClient::InEventParam

WeaveEchoClient API 事件的输入参数。

nl::Weave::Profiles::Echo_Next::WeaveEchoClient::OutEventParam

WeaveEchoClient API 事件输出参数。

公共类型

EventCallback

void(* EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)

EventType

 EventType
属性
kEvent_CommunicationError

发送 EchoRequest 或等待响应时发生通信错误。

kEvent_DefaultCheck

用于验证应用中的默认事件处理是否正确无误。

kEvent_PreparePayload

系统会请求应用为 Echo 请求准备载荷。

kEvent_RequestAborted

正在进行的 Echo 交换已被取消,因为已发出启动其他交换的请求。

kEvent_RequestSent

向对等端发送了 EchoRequest 消息。

kEvent_ResponseReceived

从对等端收到了 EchoResponse 消息。

kEvent_ResponseTimeout

在指定的时间内未收到 EchoResponse。

 State
属性
kState_Idle

客户端对象处于空闲状态。

kState_NotInitialized

客户端对象未初始化。

kState_PreparingBinding

客户端对象正在等待绑定准备就绪。

kState_RequestInProgress

EchoRequest 消息已发送,客户端对象正在等待响应。

kState_WaitingToSend

已调用 SendRepeating(),并且客户端对象正在等待下次发送 EchoRequest。

公共属性

AppState

void * AppState

指向应用特定数据的指针。

公共函数

GetBinding

Binding * GetBinding(
  void
) const 

返回指向与 WeaveEchoClient 关联的 Binding 对象的指针。

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

返回一个指针,该指针指向当前在 WeaveEchoClient 对象上配置的 API 事件回调函数。

GetState

State GetState(
  void
) const 

检索 WeaveEchoClient 对象的当前状态。

Init

WEAVE_ERROR Init(
  Binding *binding,
  EventCallback eventCallback,
  void *appState
)

初始化 WeaveEchoClient 对象。

初始化 WeaveEchoClient 对象,以准备向对等端发送 echo 消息。

详细信息
参数
[in] binding
将用于与对等节点建立通信的 Binding 对象。
[in] eventCallback
指向将由 WeaveEchoClient 对象调用以向应用传递 API 事件的函数的指针。
[in] appState
指向应用程序定义的对象的指针,当发生 API 事件时,该对象将传回应用程序。

IsSendRrepeating

bool IsSendRrepeating() const 

如果 WeaveEchoClient 对象当前处于发送重复模式,则返回 true。

RequestInProgress

bool RequestInProgress() const 

如果 EchoRequest 已发送且 WeaveEchoClient 对象正在等待响应,则返回 true。

发送

WEAVE_ERROR Send(
  void
)

向对等端发送 EchoRequest 消息。

此方法会启动向对等节点发送 EchoRequest 消息的过程。如果收到相应的 EchoResponse 消息,该消息将通过 ResponseReceived API 事件传送至应用。

在生成 EchoRequest 消息时,WeaveEchoClient 会通过 PreparePayload API 事件向应用发出请求,以准备消息的负载。

如果在调用此方法时,Binding 对象未处于就绪状态,则系统会向 Binding::RequestPrepare() 方法发出请求,以启动按需准备。然后,发送操作将加入队列,直到此过程完成。此队列的最大深度为 1。因此,在队列中有前一项发送时对 Send() 的任何调用都会导致仅发送一个 EchoRequest。

WeaveEchoClient 处于发送重复模式(即由于之前调用 SendRepeating())时,调用 Send() 会加速并重置发送周期,但不会使 WeaveEchoClient 退出重复发送模式。

发送

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

向对等端发送具有特定载荷的 EchoRequest 消息。

此方法会启动向对等节点发送 EchoRequest 消息的过程。所提供的载荷缓冲区的内容将作为 EchoRequest 消息的载荷发送到对等端。如果收到相应的 EchoResponse 消息,该消息将通过 ResponseReceived API 事件传送至应用。

调用此方法时,所提供的有效负载缓冲区的所有权会传递给 WeaveEchoClient 对象,该对象负责释放缓冲区。无论方法成功完成还是出错,都是如此。

如果在调用此方法时,Binding 对象未处于就绪状态,则系统会向 Binding::RequestPrepare() 方法发出请求,以启动按需准备。然后,发送操作将加入队列,直到此过程完成为止。此队列的最大深度为 1。因此,在队列中有前一项发送时对 Send() 的任何调用都会导致仅发送一个 EchoRequest。

WeaveEchoClient 处于发送重复模式(即由于之前调用 SendRepeating())时,调用 Send() 会加速并重置发送周期,但不会使 WeaveEchoClient 退出重复发送模式。

详细信息
参数
[in] payloadBuf
一个 PacketBuffer 对象,其中包含要发送到对等端的载荷数据。在任何情况下,此缓冲区的所有权都会传递给 WeaveEchoClient 对象。

SendRepeating

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

开始向对等端发送一系列重复的 EchoRequest 消息。

此方法会启动向对等端发送 EchoRequest 消息的重复过程。当 EchoResponse 消息从对等端收到时,系统将通过 ResponseReceived API 事件将其传递到应用。

调用 SendRepeating() 时,WeaveEchoClient 会进入重复发送模式,在该模式下,此模式会一直保持到调用 Stop() 或发生 Binding 错误为止。多次调用 SendRepeating() 会产生重置发送周期并更新时间间隔的效果。

序列的初始发送时间发生在 SendRepeating() 调用时,或者当 Binding 在调用 SendRepeating() 后变为就绪状态时(见下文)。此后,系统会以指定的时间间隔发送后续数据。

每次发送时,WeaveEchoClient 都会通过 PreparePayload API 事件向应用发出请求,以准备消息的负载。

如果 Binding 对象在发送消息时未处于就绪状态,则系统会向 Binding::RequestPrepare() 方法发出请求,以启动按需准备。之后的重复消息发送将被暂停,直到此过程完成为止。在按需 Binding 准备期间失败将导致 WeaveEchoClient 退出发送重复模式。

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

WeaveEchoClient 对象上设置 API 事件回调函数。

关停

void Shutdown(
  void
)

关闭先前初始化的 WeaveEchoClient 对象。

请注意,只有在之前调用过 Init() 方法的情况下,才能调用此方法。

停止

void Stop(
  void
)

停止任何正在进行的 Echo 交换,并取消重复发送模式。

WeaveEchoClient

 WeaveEchoClient(
  void
)

公共静态函数

DefaultEventHandler

void DefaultEventHandler(
  void *appState,
  EventType eventType,
  const InEventParam & inParam,
  OutEventParam & outParam
)

WeaveEchoClient API 事件的默认处理程序。

应用需要针对其无法识别或处理的任何 API 事件调用此方法。提供的参数必须与客户端对象传递给应用的事件处理脚本函数的参数相同。

详细信息
参数
[in] appState
指向与客户端对象关联的应用定义的状态信息的指针。
[in] eventType
事件回调函数传递的事件 ID
[in] inParam
对由事件回调传递的输入事件参数的引用
[in] outParam
对由事件回调函数传递的输出事件参数的引用