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).
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)
|
typedefvoid(*
|
EventType{
|
enum |
State{
|
enum |
Atributos públicos |
|
---|---|
AppState
|
void *
Um ponteiro para dados específicos do aplicativo.
|
Funções públicas |
|
---|---|
GetBinding(void) const
|
Binding *
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:: |
Parâmetros de entrada para o evento da API WeaveEchoClient. |
nl:: |
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.
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 |
|
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 |
|
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 |
|