nl::Weave::Echo_Next::Echo_Next::Weave

#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.

Resumen

La clase WeaveEchoClient implementa el lado iniciador del protocolo Weave Echo. Al igual que el protocolo ICMP, el protocolo Eave Echo se puede usar para probar el funcionamiento y la accesibilidad de un nodo de Weave.

Las aplicaciones pueden usar la clase WeaveEchoClient para enviar mensajes únicos o recurrentes de EchoRequest a un nodo de par identificado con un objeto Binding. Existe una clase correspondiente para responder a las solicitudes de eco (consulta WeaveEchoServer).

Vinculación del cliente

WeaveEchoClient toma un objeto Binding de Weave que se utiliza para identificar y establecer la comunicación con el destinatario previsto de las solicitudes de eco. La aplicación puede configurar y preparar la Binding antes de la inicialización del objeto WeaveEchoClient o se puede dejar sin preparar; en ese caso, WeaveEchoClient solicitará la preparación a pedido de la vinculación (consulte Binding::RequestPrepare() para obtener más detalles).

También se solicitará la preparación de Binding a pedido en caso de que falle después de haber ingresado al estado Listo.

Modo de repetición de envío

Se puede usar el método SendRepeating() para poner WeaveEchoClient en el modo SendRepeating. En este modo, el objeto cliente envía una secuencia repetida de mensajes EchoRequest al par en un intervalo configurado. El modo SendRepeating se puede cancelar llamando al método Stop().

Multidifusión y transmisión

Se puede usar un objeto WeaveEchoClient para enviar EchoRequests simultáneamente a varios destinatarios. Para ello, se debe configurar el objeto Binding con una dirección IPv6 o de transmisión local de IPv4 adecuada (255.255.255.255). Cuando el objeto WeaveEchoClient detecta una dirección de intercambio de tráfico multidifusión o de emisión, ingresa automáticamente en el modo MultiResponse al enviar la EchoRequest.

En este modo, el objeto sigue escuchando y entregando todos los mensajes EchoResponse entrantes que llegan al mismo intercambio. El objeto permanecerá en modo de respuesta múltiple hasta que 1) la aplicación llame a Stop() o Send(), 2) en el modo SendRepeating, llegue el momento de enviar otra solicitud o hasta que no se reciba ninguna respuesta y caduque el tiempo de espera de recepción.

Eventos de API

Durante el funcionamiento del objeto, WeaveEchoClient llamará a la aplicación para solicitar acciones específicas o enviar notificaciones de eventos importantes. Estas llamadas de evento de la API se realizan a la función de devolución de llamada configurada actualmente en el objeto de cliente. Excepto donde se indique, las aplicaciones pueden modificar el estado del cliente durante una devolución de llamada de evento. Una excepción general es el método Shutdown() del objeto, al que nunca se puede llamar durante una devolución de llamada.

Se definen los siguientes eventos de la API:

PreparePayload

WeaveEchoClient está a punto de formar un mensaje EchoRequest y solicita a la aplicación que proporcione una carga útil. Si una aplicación lo desea, puede mostrar un nuevo PacketBuffer que contenga los datos de carga útil. Si la aplicación no controla este evento, se enviará automáticamente una EchoRequest con una carga útil de longitud cero. Es posible que la aplicación NO altere el estado de WeaveEchoClient durante esta devolución de llamada.

Se envió la solicitud.

Se envió un mensaje EchoRequest al par.

Respuesta recibida

Se recibió un mensaje de ecorespuesta del par. Los argumentos del evento contienen la carga útil de respuesta y la metainformación sobre el mensaje de respuesta.

Error de comunicación

Se produjo un error cuando se formó o envió una EchoRequest o mientras se esperaba una respuesta. Algunos ejemplos de errores que pueden ocurrir mientras esperas una respuesta son errores clave o un cierre inesperado de una conexión. Los argumentos del evento contienen el motivo del error.

Tiempo de espera de respuesta

No se recibió una ecorespuesta en el tiempo asignado. La propiedad DefaultResponseTimeout controla el tiempo de espera de respuesta del objeto Binding.

Solicitud anulada

Se anuló un intercambio de eco en curso porque se realizó una solicitud para enviar otra EchoRequest antes de recibir una respuesta al mensaje anterior. Esto puede ocurrir en el modo SendRepeating cuando llega el momento de enviar la siguiente EchoRequest. Esto también puede ocurrir si la aplicación llama a Send() después de que se haya enviado una EchoRequest, pero antes de que se reciba cualquier respuesta.

Cuando el objeto está en modo MultiResponse, el evento se suprime si se recibe al menos un mensaje de ecorespuesta.

Constructores y destructores

WeaveEchoClient(void)

Tipos públicos

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
}
enum
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
enum

Atributos públicos

AppState
void *
Un puntero para los datos específicos de la aplicación.

Funciones públicas

GetBinding(void) const
Muestra un puntero al objeto Binding asociado a WeaveEchoClient.
GetEventCallback(void) const
EventCallback
Muestra un puntero a la función de devolución de llamada de eventos de la API configurada actualmente en el objeto WeaveEchoClient.
GetState(void) const
Recupera el estado actual del objeto WeaveEchoClient.
Init(Binding *binding, EventCallback eventCallback, void *appState)
Inicializar un objeto WeaveEchoClient
IsSendRrepeating() const
bool
Muestra true si el objeto WeaveEchoClient está actualmente en modo de repetición de envío.
RequestInProgress() const
bool
Muestra el valor verdadero si se envió una EchoRequest y el objeto WeaveEchoClient está esperando una respuesta.
Send(void)
Envía un mensaje de EchoRequest al par.
Send(PacketBuffer *payloadBuf)
Envía un mensaje de EchoRequest al par con una carga útil específica.
SendRepeating(uint32_t sendIntervalMS)
Inicia el envío de una secuencia repetida de mensajes de EchoRequest al par.
SetEventCallback(EventCallback eventCallback)
void
Configura la función de devolución de llamada de eventos de la API en el objeto WeaveEchoClient.
Shutdown(void)
void
Cierra un objeto WeaveEchoClient inicializado con anterioridad.
Stop(void)
void
Detiene cualquier intercambio de eco en curso y cancela el modo de repetición de envío.

Funciones estáticas públicas

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
Controlador predeterminado para eventos de la API de WeaveEchoClient.

Structs

nl::Weave::Perfiles::Echo_Next::WeaveEchoClient::InEventParam

Los parámetros de entrada para el evento de la API de WeaveEchoClient

nl::Weave::Perfiles::Echo_Next::Cliente Weave::OutEventParam

Los parámetros de salida para el evento de la API de WeaveEchoClient

Tipos públicos

EventCallback

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

Tipo de evento

 EventType
Properties
kEvent_CommunicationError

Se produjo un error de comunicación al enviar una EchoRequest o esperar una respuesta.

kEvent_DefaultCheck

Se utiliza para verificar la administración predeterminada de eventos en la aplicación.

kEvent_PreparePayload

Se solicita a la aplicación que prepare la carga útil para la solicitud Echo.

kEvent_RequestAborted

Se anuló un intercambio de eco en curso porque se realizó una solicitud para iniciar otro intercambio.

kEvent_RequestSent

Se envió un mensaje EchoRequest al par.

kEvent_ResponseReceived

Se recibió un mensaje de ecorespuesta del par.

kEvent_ResponseTimeout

No se recibió una ecorespuesta en el tiempo asignado.

Estado

 State
Properties
kState_Idle

El objeto del cliente está inactivo.

kState_NotInitialized

No se inicializó el objeto de cliente.

kState_PreparingBinding

El objeto del cliente espera a que la vinculación esté lista.

kState_RequestInProgress

Se envió un mensaje de EchoRequest y el objeto cliente está esperando una respuesta.

kState_WaitingToSend

Se llamó a SendRepeating(), y el objeto cliente espera la próxima vez para enviar una EchoRequest.

Atributos públicos

Estado de la aplicación

void * AppState

Un puntero para los datos específicos de la aplicación.

Funciones públicas

GetBinding

Binding * GetBinding(
  void
) const 

Muestra un puntero al objeto Binding asociado a WeaveEchoClient.

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

Muestra un puntero a la función de devolución de llamada de eventos de la API configurada actualmente en el objeto WeaveEchoClient.

Obtener estado

State GetState(
  void
) const 

Recupera el estado actual del objeto WeaveEchoClient.

Init

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

Inicializar un objeto WeaveEchoClient

Inicializa un objeto WeaveEchoClient como preparación para enviar mensajes de eco a un par.

Detalles
Parámetros
[in] binding
Un objeto Binding que se usará para establecer la comunicación con el nodo del par.
[in] eventCallback
Un puntero para una función que llamará el objeto WeaveEchoClient a fin de entregar eventos de API a la aplicación.
[in] appState
Un puntero para un objeto definido por la aplicación que se pasará a la aplicación cada vez que se produzca un evento de la API.

Está en repetir

bool IsSendRrepeating() const 

Muestra true si el objeto WeaveEchoClient está actualmente en modo de repetición de envío.

Solicitud en curso

bool RequestInProgress() const 

Muestra el valor verdadero si se envió una EchoRequest y el objeto WeaveEchoClient está esperando una respuesta.

Enviar

WEAVE_ERROR Send(
  void
)

Envía un mensaje de EchoRequest al par.

Este método inicia el proceso de envío de un mensaje de EchoRequest al nodo del par. Cuando se reciba el mensaje de EchoResponse y se envíe, se enviará a la aplicación mediante el evento de la API de ResponseReceived.

Cuando se forma el mensaje EchoRequest, WeaveEchoClient realiza una solicitud a la aplicación a través del evento de la API de PreparePayload para preparar la carga útil del mensaje.

Si el objeto Binding no está en el estado Listo cuando se llama a este método, se realizará una solicitud al método Binding::RequestPrepare() para iniciar la preparación a pedido. La operación de envío se pondrá en cola hasta que se complete este proceso. La profundidad máxima de esta fila es de una. Por lo tanto, cualquier llamada a Send() mientras haya una envío anterior en la cola generará un solo EchoRequest.

Llamar a Send() mientras WeaveEchoClient está en modo de repetición de envío (es decir, debido a una llamada anterior a SendRepeating()) tiene el efecto de acelerar y restablecer el ciclo de envío, pero no quita WeaveEchoClient del modo de repetición de envío.

Enviar

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

Envía un mensaje de EchoRequest al par con una carga útil específica.

Este método inicia el proceso de envío de un mensaje de EchoRequest al nodo del par. El contenido del búfer de carga útil proporcionado se enviará al par como la carga útil del mensaje EchoRequest. Cuando se reciba el mensaje de EchoResponse y se envíe, se enviará a la aplicación mediante el evento de la API de ResponseReceived.

Cuando se llama a este método, la propiedad del búfer de carga útil proporcionado pasa al objeto WeaveEchoClient, que tiene la responsabilidad de liberarlo. Esto sucede independientemente de que el método se complete con éxito o con un error.

Si el objeto Binding no está en el estado Listo cuando se llama a este método, se realizará una solicitud al método Binding::RequestPrepare() para iniciar la preparación a pedido. La operación de envío se pondrá en cola hasta que se complete este proceso. La profundidad máxima de esta fila es de una. Por lo tanto, cualquier llamada a Send() mientras haya una envío anterior en la cola generará un solo EchoRequest.

Llamar a Send() mientras WeaveEchoClient está en modo de repetición de envío (es decir, debido a una llamada anterior a SendRepeating()) tiene el efecto de acelerar y restablecer el ciclo de envío, pero no quita WeaveEchoClient del modo de repetición de envío.

Detalles
Parámetros
[in] payloadBuf
Un objeto PacketBuffer que contiene datos de carga útil que se enviarán al par. En todos los casos, la propiedad de este búfer se pasa al objeto WeaveEchoClient.

Repetir

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

Inicia el envío de una secuencia repetida de mensajes de EchoRequest al par.

Este método inicia un proceso recurrente de envío de mensajes EchoRequest al par. A medida que los mensajes de EchoResponse se reciben del par, se entregan a la aplicación a través del evento de API de ResponseReceived.

Cuando se llama a SendRepeating(), WeaveEchoClient ingresa al modo de repetición de envío en el que permanece hasta que se llama a Stop() o se produce un error de Binding. Llamar a SendRepeating() varias veces tiene el efecto de restablecer el ciclo de envío y de actualizar el intervalo.

El envío inicial de una secuencia se produce en el momento en que se llama a SendRepeating() o cuando la vinculación se prepara después de que se llama a SendRepeating() (ver a continuación). Luego, los envíos posteriores se realizarán en el intervalo especificado.

Cada vez que se produce un envío, WeaveEchoClient realiza una solicitud a la aplicación a través del evento de la API de PreparePayload para preparar la carga útil del mensaje.

Si el objeto Binding no está en el estado Listo cuando llegue el momento de enviar un mensaje, se hará una solicitud al método Binding::RequestPrepare() para iniciar la preparación a pedido. Se detendrán los envíos de mensajes repetidos hasta que se complete este proceso. Un error durante la preparación de Binding a pedido hará que WeaveEchoClient salga del modo de repetición de envío.

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

Configura la función de devolución de llamada de eventos de la API en el objeto WeaveEchoClient.

Cierre

void Shutdown(
  void
)

Cierra un objeto WeaveEchoClient inicializado con anterioridad.

Ten en cuenta que solo se puede llamar a este método si se llamó al método Init() anteriormente.

Detener

void Stop(
  void
)

Detiene cualquier intercambio de eco en curso y cancela el modo de repetición de envío.

Cliente de Weave

 WeaveEchoClient(
  void
)

Funciones estáticas públicas

DefaultEventHandler.

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

Controlador predeterminado para eventos de la API de WeaveEchoClient.

Las aplicaciones deben llamar a este método para cualquier evento de la API que no reconozcan ni manejen. Los parámetros proporcionados deben ser los mismos que los que pasa el objeto cliente a la función del controlador de eventos de la aplicación.

Detalles
Parámetros
[in] appState
Un puntero para la información de estado definida por la aplicación asociada con el objeto de cliente.
[in] eventType
ID de evento pasado por la devolución de llamada de evento
[in] inParam
Referencia de los parámetros de eventos de entrada que pasa la devolución de llamada de eventos.
[in] outParam
Referencia de los parámetros de eventos de salida que pasa la devolución de llamada de eventos.