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.

Resumo

A classe WeaveEchoClient implementa o lado do iniciador do protocolo Weave Echo. Semelhante ao protocolo de ping ICMP, o protocolo Weave Echo pode ser usado para testar a atividade e a acessibilidade de um nó do Weave.

Os aplicativos podem usar a classe WeaveEchoClient para enviar mensagens EchoRequest únicas ou repetidas para um nó de peering identificado por um objeto Binding. Existe uma classe correspondente para responder a solicitações de eco (consulte WeaveEchoServer).

Vinculação de cliente

O WeaveEchoClient usa um objeto Binding do Weave, que é usado para identificar e estabelecer a comunicação com o destinatário pretendido das solicitações de transmissão. A classe Binding pode ser configurada e preparada pelo aplicativo antes da inicialização do objeto WeaveEchoClient ou pode ser deixada despreparada. Nesse caso, WeaveEchoClient vai solicitar a preparação sob demanda da vinculação. Consulte Binding::RequestPrepare() para ver mais detalhes.

A preparação sob demanda de Binding também será solicitada se ela falhar depois de entrar no estado "Ready".

Modo EnviarRepeating

O método SendRepeating() pode ser usado para colocar o WeaveEchoClient no modo EnviarRepeating. Neste modo, o objeto cliente envia uma sequência repetida de mensagens EchoRequest para o peering em um intervalo configurado. O modo sendRepeating pode ser cancelado chamando o método Stop().

Multicast e transmissão

Um objeto WeaveEchoClient pode ser usado para enviar EchoRequests a vários destinatários simultaneamente, configurando o objeto Binding com um endereço multicast IPv6 apropriado ou endereço de transmissão de rede local IPv4 (255.255.255.255). Quando o objeto WeaveEchoClient detecta um endereço multicast ou de peering de transmissão, ele entra automaticamente no modo MultiResponse ao enviar a EchoRequest.

Neste modo, o objeto continua a detectar e entregar todas as mensagens EchoResponse recebidas que chegam na mesma troca. O objeto permanece no modo MultiResponse até que: 1) o aplicativo chame Stop() ou Send(), 2) no modo SubmitRepeating, o momento chegue para enviar outra solicitação ou 3) nenhuma resposta seja recebida e o tempo limite de recebimento expire.

Eventos da API

Durante a operação, o objeto WeaveEchoClient chamará o aplicativo para solicitar ações específicas ou enviar notificações de eventos importantes. Essas chamadas de evento de API são feitas para a função de callback atualmente configurada no objeto do cliente. Exceto quando indicado, os aplicativos são livres para alterar o estado do cliente durante um callback de evento. Uma exceção geral é o método Shutdown() do objeto, que pode nunca ser chamado durante um callback.

Os seguintes eventos da API são definidos:

PreparePayload

O WeaveEchoClient está prestes a formar uma mensagem EchoRequest e está solicitando que o aplicativo forneça um payload. Se um aplicativo quiser, ele pode retornar um novo PacketBuffer contendo os dados de payload. Se o aplicativo não manipular esse evento, um EchoRequest com um payload de tamanho zero será enviado automaticamente. O aplicativo NÃO PODE alterar o estado do WeaveEchoClient durante esse callback.

RequestSent

Uma mensagem EchoRequest foi enviada para o ponto.

ResponseReceived

Uma mensagem EchoResponse foi recebida do peering. Os argumentos para o evento contêm o payload de resposta e as metainformações sobre a mensagem de resposta.

CommunicationError

Ocorreu um erro ao formar ou enviar uma EchoRequest ou ao aguardar uma resposta. Exemplos de erros que podem ocorrer durante a espera por uma resposta são erros de chave ou fechamento inesperado de uma conexão. Os argumentos para o evento contêm o motivo do erro.

ResponseTimeout

Uma EchoResponse não foi recebida no tempo alocado. O tempo limite da resposta é controlado pela propriedade DefaultResponseTimeout no objeto Binding.

RequestAborted

Uma troca de eco em andamento foi cancelada porque foi feita uma solicitação para enviar outra EchoRequest antes de receber uma resposta à mensagem anterior. Isso pode surgir no modo EnviarRepeating quando chegar o horário para enviar a próxima EchoRequest. Isso também pode acontecer se o aplicativo chamar Send() depois do envio de uma EchoRequest, mas antes de qualquer resposta ser recebida.

Quando o objeto estiver no modo MultiResponse, o evento será suprimido se pelo menos uma mensagem EchoResponse tiver sido recebida.

Construtores e destrutores

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 *
Um ponteiro para dados específicos do aplicativo.

Funções públicas

GetBinding(void) const
Retorna um ponteiro para o objeto Binding associado ao WeaveEchoClient.
GetEventCallback(void) const
EventCallback
Retorna um ponteiro para a função de retorno de chamada do evento da API atualmente configurada no objeto WeaveEchoClient.
GetState(void) const
Recupere o estado atual do objeto WeaveEchoClient.
Init(Binding *binding, EventCallback eventCallback, void *appState)
Inicialize um objeto WeaveEchoClient.
IsSendRrepeating() const
bool
Retorna verdadeiro se o objeto WeaveEchoClient estiver no modo de repetição de envio.
RequestInProgress() const
bool
Retorna verdadeiro se um EchoRequest tiver sido enviado e o objeto WeaveEchoClient estiver aguardando uma resposta.
Send(void)
Envie uma mensagem EchoRequest para o peering.
Send(PacketBuffer *payloadBuf)
Envia uma mensagem EchoRequest para o peering com um payload específico.
SendRepeating(uint32_t sendIntervalMS)
Iniciar o envio de uma sequência repetida de mensagens EchoRequest para o ponto.
SetEventCallback(EventCallback eventCallback)
void
Define a função de callback do evento da API no objeto WeaveEchoClient.
Shutdown(void)
void
Encerre um objeto WeaveEchoClient inicializado anteriormente.
Stop(void)
void
Interrompe qualquer troca de eco em andamento e cancela o modo de repetição de envio.

Funções estáticas públicas

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
Gerenciador padrão de eventos da API WeaveEchoClient.

Estruturas

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

Parâmetros de entrada para o evento da API WeaveEchoClient.

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

Parâmetros de saída para o evento da API WeaveEchoClient.

Tipos públicos

EventCallback

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

EventType

 EventType
Propriedades
kEvent_CommunicationError

Ocorreu um erro de comunicação ao enviar uma EchoRequest ou aguardar uma resposta.

kEvent_DefaultCheck

Usado para verificar o gerenciamento correto de eventos padrão no aplicativo.

kEvent_PreparePayload

O aplicativo é solicitado para preparar o payload da solicitação de eco.

kEvent_RequestAborted

Uma troca de eco em andamento foi cancelada porque foi feita uma solicitação para iniciar outra troca.

kEvent_RequestSent

Uma mensagem EchoRequest foi enviada para o ponto.

kEvent_ResponseReceived

Uma mensagem EchoResponse foi recebida do peering.

kEvent_ResponseTimeout

Uma EchoResponse não foi recebida no tempo alocado.

Estado

 State
Propriedades
kState_Idle

O objeto do cliente está inativo.

kState_NotInitialized

O objeto cliente não foi inicializado.

kState_PreparingBinding

O objeto cliente está aguardando a vinculação ficar pronta.

kState_RequestInProgress

Uma mensagem EchoRequest foi enviada e o objeto cliente está aguardando uma resposta.

kState_WaitingToSend

SendRepeating() foi chamado e o objeto cliente está aguardando a próxima vez que enviar uma EchoRequest.

Atributos públicos

AppState

void * AppState

Um ponteiro para dados específicos do aplicativo.

Funções públicas

GetBinding

Binding * GetBinding(
  void
) const 

Retorna um ponteiro para o objeto Binding associado ao WeaveEchoClient.

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

Retorna um ponteiro para a função de retorno de chamada do evento da API atualmente configurada no objeto WeaveEchoClient.

GetState

State GetState(
  void
) const 

Recupere o estado atual do objeto WeaveEchoClient.

Init

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

Inicialize um objeto WeaveEchoClient.

Inicialize um objeto WeaveEchoClient em preparação para enviar mensagens de eco a um peering.

Detalhes
Parâmetros
[in] binding
Um objeto Binding que será usado para estabelecer a comunicação com o nó de peering.
[in] eventCallback
Um ponteiro para uma função que será chamada pelo objeto WeaveEchoClient para entregar eventos de API para o aplicativo.
[in] appState
Um ponteiro para um objeto definido pelo aplicativo que será retornado ao aplicativo sempre que ocorrer um evento da API.

IsSendRrepeating

bool IsSendRrepeating() const 

Retorna verdadeiro se o objeto WeaveEchoClient estiver no modo de repetição de envio.

RequestInProgress

bool RequestInProgress() const 

Retorna verdadeiro se um EchoRequest tiver sido enviado e o objeto WeaveEchoClient estiver aguardando uma resposta.

Enviar

WEAVE_ERROR Send(
  void
)

Envie uma mensagem EchoRequest para o peering.

Este método inicia o processo de envio de uma mensagem EchoRequest para o nó de mesmo nível. Se e quando uma mensagem EchoResponse correspondente for recebida, ela será entregue ao aplicativo por meio do evento da API ResponseReceived.

Ao formar a mensagem EchoRequest, o WeaveEchoClient faz uma solicitação ao aplicativo, por meio do evento da API PreparePayload, para preparar o payload da mensagem.

Se o objeto Binding não estiver no estado Ready quando esse método for chamado, uma solicitação será feita ao método Binding::RequestPrepare() para iniciar a preparação sob demanda. A operação de envio será colocada na fila até que o processo seja concluído. A profundidade máxima dessa fila é 1. Assim, qualquer chamada para Send() enquanto houver um envio anterior na fila resultará no envio de apenas um EchoRequest.

Chamar Send() enquanto o WeaveEchoClient estiver no modo de repetição de envio (ou seja, devido a uma chamada anterior para SendRepeating()) tem o efeito de acelerar e redefinir o ciclo de envio, mas não tira o WeaveEchoClient do modo de repetição de envio.

Enviar

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

Envia uma mensagem EchoRequest para o peering com um payload específico.

Este método inicia o processo de envio de uma mensagem EchoRequest para o nó de mesmo nível. O conteúdo do buffer de payload fornecido será enviado para o peering como o payload da mensagem EchoRequest. Se e quando uma mensagem EchoResponse correspondente for recebida, ela será entregue ao aplicativo por meio do evento da API ResponseReceived.

Ao chamar esse método, a propriedade do buffer de payload fornecido passa para o objeto WeaveEchoClient, que tem a responsabilidade de liberá-lo. Isso ocorre independentemente do método ser concluído com êxito ou com um erro.

Se o objeto Binding não estiver no estado Ready quando esse método for chamado, uma solicitação será feita ao método Binding::RequestPrepare() para iniciar a preparação sob demanda. A operação de envio será colocada na fila até que o processo seja concluído. A profundidade máxima dessa fila é 1. Assim, qualquer chamada para Send() enquanto houver um envio anterior na fila resultará no envio de apenas um EchoRequest.

Chamar Send() enquanto o WeaveEchoClient estiver no modo de repetição de envio (ou seja, devido a uma chamada anterior para SendRepeating()) tem o efeito de acelerar e redefinir o ciclo de envio, mas não tira o WeaveEchoClient do modo de repetição de envio.

Detalhes
Parâmetros
[in] payloadBuf
Um objeto PackageBuffer que contém os dados do payload a serem enviados ao ponto. A propriedade desse buffer é transferida para o objeto WeaveEchoClient em todos os casos.

SendRepeating

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

Iniciar o envio de uma sequência repetida de mensagens EchoRequest para o ponto.

Este método inicia um processo de repetição de envio de mensagens EchoRequest para o ponto. À medida que as mensagens EchoResponse são recebidas do ponto, elas são entregues ao aplicativo por meio do evento da API ResponseReceived.

Quando SendRepeating() é chamado, o WeaveEchoClient entra no modo de repetição de envio, no qual permanece até que Stop() seja chamado ou que um erro Binding ocorra. Chamar SendRepeating() várias vezes redefine o ciclo de envio e atualiza o intervalo.

O envio inicial de uma sequência ocorre no momento em que SendRepeating() é chamado ou sempre que o Binding fica pronto depois que SendRepeating() é chamado (veja abaixo). Os envios subsequentes ocorrem depois no intervalo especificado.

Cada vez que ocorre um envio, o WeaveEchoClient faz uma solicitação ao aplicativo, por meio do evento da API PreparePayload, para preparar o payload da mensagem.

Se o objeto Binding não estiver no estado "Ready" no momento de enviar uma mensagem, uma solicitação será feita ao método Binding::RequestPrepare() para iniciar a preparação sob demanda. Outros envios de mensagens repetidas serão pausados até que esse processo seja concluído. Uma falha durante a preparação sob demanda de Binding fará com que o WeaveEchoClient saia do modo de repetição de envio.

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

Define a função de callback do evento da API no objeto WeaveEchoClient.

Desligamento

void Shutdown(
  void
)

Encerre um objeto WeaveEchoClient inicializado anteriormente.

Esse método só poderá ser chamado se o método Init() tiver sido chamado anteriormente.

Parar

void Stop(
  void
)

Interrompe qualquer troca de eco em andamento e cancela o modo de repetição de envio.

WeaveEchoClient

 WeaveEchoClient(
  void
)

Funções estáticas públicas

DefaultEventHandler

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

Gerenciador padrão de eventos da API WeaveEchoClient.

Os aplicativos precisam chamar esse método para eventos da API que não reconhecerem ou manipularem. Os parâmetros fornecidos devem ser iguais aos passados pelo objeto do cliente para a função do manipulador de eventos do aplicativo.

Detalhes
Parâmetros
[in] appState
Um ponteiro para informações de estado definidas pelo aplicativo e associadas ao objeto do cliente.
[in] eventType
ID do evento transmitido pelo callback do evento
[in] inParam
Referência dos parâmetros do evento de entrada transmitidos pelo callback do evento
[in] outParam
Referência dos parâmetros do evento de saída transmitidos pelo callback do evento