nl:: Weave:: Perfis:: 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 de eco do Weave 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 recorrentes para um nó de peering identificado por um objeto Binding. Existe uma classe correspondente para responder às solicitações de eco (consulte WeaveEchoServer).
O WeaveEchoClient usa um objeto Binding do Weave que é usado para identificar e estabelecer comunicação com o destinatário das solicitações de echo. A Binding pode ser configurada e preparada pelo aplicativo antes da inicialização do objeto WeaveEchoClient ou pode não ser preparada. Nesse caso, o WeaveEchoClient solicitará a preparação sob demanda da vinculação. Consulte Binding::RequestPrepare() para mais detalhes.
A preparação sob demanda da Binding também será solicitada em caso de falha após o estado "Pronto".
Modo SendRepeating
O método SendRepeating() pode ser usado para colocar o WeaveEchoClient no modo SendRepeating. Nesse modo, o objeto cliente envia uma sequência repetida de mensagens EchoRequest para o par 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 IPv6 multicast adequado ou um endereço de transmissão de rede local IPv4 (255.255.255.255). Quando o objeto WeaveEchoClient detecta um endereço de peering de transmissão ou multicast, ele entra automaticamente no modo MultiResponse após o envio do EchoRequest.
Nesse modo, o objeto continua a ouvir e entregar todas as mensagens EchoResponse recebidas que chegam na mesma troca. O objeto permanece no modo MultiResponse até: 1) o aplicativo chamar Stop() ou Send(), 2) no modo SendRepeating, chegar a hora de enviar outra solicitação ou 3) nenhuma resposta ser recebida e o tempo limite de recebimento expirar.
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 configurada no objeto do cliente. Exceto quando indicado, os aplicativos podem mudar o estado do cliente durante um callback de evento. Uma exceção geral é o método Shutdown() do objeto, que nunca pode ser chamado durante um callback.
Os seguintes eventos de 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 PackageBuffer que contém os dados de payload. Se o aplicativo não processar este 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.
Solicitação enviada
Uma mensagem EchoRequest foi enviada para o terminal.
Resposta recebida
Uma mensagem EchoResponse foi recebida do terminal. Os argumentos do evento contêm o payload da resposta e as metainformações sobre a mensagem de resposta.
Erro de comunicação
Ocorreu um erro ao formar ou enviar uma EchoRequest ou aguardar uma resposta. Exemplos de erros que podem ocorrer durante a espera de uma resposta são os principais erros ou o encerramento inesperado de uma conexão. Os argumentos do evento contêm o motivo do erro.
Tempo limite de resposta
Um EchoResponse não foi recebido no tempo alocado. O tempo limite de resposta é controlado pela propriedade DefaultResponseTimeout no objeto Binding.
Solicitação cancelada
Uma troca de eco em andamento foi cancelada porque foi feita uma solicitação para enviar outra EchoRequest antes que uma resposta fosse recebida para a mensagem anterior. Isso pode surgir no modo SendRepeating quando chegar a hora para enviar o próximo 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 é no modo MultiResponse, o evento é suprimido se pelo menos uma mensagem EchoResponse foi recebida.
Construtores e destruidores |
|
---|---|
WeaveEchoClient(void)
|
Tipos públicos |
|
---|---|
EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)
|
typedefvoid(*
|
EventType{
|
tipo enumerado |
State{
|
tipo enumerado |
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 de evento da API 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 atualmente no modo de envio repetido.
|
RequestInProgress() const
|
bool
Retorna verdadeiro se uma EchoRequest foi enviada e o objeto WeaveEchoClient está aguardando uma resposta.
|
Send(void)
|
Envie uma mensagem EchoRequest ao par.
|
Send(PacketBuffer *payloadBuf)
|
Envie uma mensagem EchoRequest ao par com um payload específico.
|
SendRepeating(uint32_t sendIntervalMS)
|
Comece a enviar uma sequência repetida de mensagens EchoRequest ao par.
|
SetEventCallback(EventCallback eventCallback)
|
void
Define a função de callback de evento de API no objeto WeaveEchoClient.
|
Shutdown(void)
|
void
Encerra um objeto WeaveEchoClient inicializado anteriormente.
|
Stop(void)
|
void
Interrompe qualquer troca Echo em andamento e cancela o modo de envio repetido.
|
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
Callback de evento
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 a preparar o payload para a solicitação Echo. |
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 terminal. |
kEvent_ResponseReceived
|
Uma mensagem EchoResponse foi recebida do terminal. |
kEvent_ResponseTimeout
|
Um EchoResponse não foi recebido no tempo alocado. |
Estado
State
Propriedades | |
---|---|
kState_Idle
|
O objeto do cliente está inativo. |
kState_NotInitialized
|
O objeto do 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 do cliente está aguardando uma resposta. |
kState_WaitingToSend
|
SendRepeating() foi chamado e o objeto cliente está aguardando a próxima vez para enviar um EchoRequest. |
Atributos públicos
Estado do aplicativo
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 de evento da API configurada no objeto WeaveEchoClient.
GetState (link em inglês)
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 como forma de enviar mensagens echo para um peer.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
IsSendRrepeating
bool IsSendRrepeating() const
Retorna verdadeiro se o objeto WeaveEchoClient estiver atualmente no modo de envio repetido.
RequestInProgress
bool RequestInProgress() const
Retorna verdadeiro se uma EchoRequest foi enviada e o objeto WeaveEchoClient está aguardando uma resposta.
Enviar
WEAVE_ERROR Send( void )
Envie uma mensagem EchoRequest ao par.
Esse método inicia o processo de envio de uma mensagem EchoRequest ao nó de peering. Se e quando uma mensagem EchoResponse correspondente for recebida, ela será entregue ao aplicativo pelo 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 "Pronto" quando esse método for chamado, uma solicitação será feita para o método Binding::RequestPrepare() para iniciar a preparação sob demanda. A operação de envio ficará na fila até que esse processo seja concluído. A profundidade máxima dessa fila é de um. Assim, qualquer chamada para Send() enquanto houver um envio anterior na fila fará com que apenas um EchoRequest seja enviado.
Chamar Send() enquanto o WeaveEchoClient está 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 remove o WeaveEchoClient do modo de repetição de envio.
Enviar
WEAVE_ERROR Send( PacketBuffer *payloadBuf )
Envie uma mensagem EchoRequest ao par com um payload específico.
Esse método inicia o processo de envio de uma mensagem EchoRequest ao nó de peering. O conteúdo do buffer de payload fornecido será enviado ao peering como o payload da mensagem EchoRequest. Se e quando uma mensagem EchoResponse correspondente for recebida, ela será entregue ao aplicativo pelo evento da API ResponseReceived.
Ao chamar esse método, a propriedade do buffer de payload fornecido é transmitida para o objeto WeaveEchoClient, que é responsável por liberá-lo. Isso ocorre independentemente de o método ser concluído com êxito ou com um erro.
Se o objeto Binding não estiver no estado "Pronto" quando esse método for chamado, uma solicitação será feita para o método Binding::RequestPrepare() para iniciar a preparação sob demanda. A operação de envio ficará na fila até que esse processo seja concluído. A profundidade máxima dessa fila é de um. Assim, qualquer chamada para Send() enquanto houver um envio anterior na fila fará com que apenas um EchoRequest seja enviado.
Chamar Send() enquanto o WeaveEchoClient está 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 remove o WeaveEchoClient do modo de repetição de envio.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
SendRepeating (Envio repetido)
WEAVE_ERROR SendRepeating( uint32_t sendIntervalMS )
Comece a enviar uma sequência repetida de mensagens EchoRequest ao par.
Esse método inicia um processo repetido de envio de mensagens EchoRequest ao par. À medida que as mensagens EchoResponse são recebidas do peering, elas são entregues ao aplicativo pelo evento da API ResponseReceived.
Quando SendRepeating() é chamado, o WeaveEchoClient entra no modo enviar-repetição até que Stop() seja chamado ou ocorra um erro Binding. Chamar SendRepeating() várias vezes tem o efeito de redefinir o ciclo de envio e atualizar o intervalo.
O envio inicial de uma sequência ocorre no momento em que SendRepeating() é chamado ou sempre que a Binding fica pronta depois que SendRepeating() é chamado (veja abaixo). Os próximos envios ocorrem posteriormente no intervalo especificado.
Toda 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 "Pronto" para enviar uma mensagem, uma solicitação será feita no método Binding::RequestPrepare() para iniciar a preparação sob demanda. Outras mensagens repetidas serão pausadas até que o processo seja concluído. Uma falha durante a preparação Binding sob demanda fará com que o WeaveEchoClient saia do modo de repetição repetida.
SetEventCallback
void SetEventCallback( EventCallback eventCallback )
Define a função de callback de evento de API no objeto WeaveEchoClient.
Encerramento
void Shutdown( void )
Encerra 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 Echo em andamento e cancela o modo de envio repetido.
WeaveEchoClient
WeaveEchoClient( void )
Funções estáticas públicas
Gerenciador de eventos padrão
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 quaisquer eventos de API que não reconheçam ou manipulem. Os parâmetros fornecidos precisam ser os mesmos transmitidos pelo objeto cliente para a função de manipulador de eventos do aplicativo.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|