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.
Riepilogo
La classe WeaveEchoClient implementa il lato iniziatore del protocollo Weave Echo. Come il protocollo ping ICMP, il protocollo Weave Echo può essere utilizzato per testare l'attività e la raggiungibilità di un nodo Weave.
Le applicazioni possono utilizzare la classe WeaveEchoClient per inviare messaggi EchoRequest una tantum o ripetuti a un nodo peer identificato da un oggetto Binding. Esiste una classe corrispondente per rispondere alle richieste echo (vedi WeaveEchoServer).
Associazione client
WeaveEchoClient accetta un oggetto Binding Weave, che viene utilizzato per identificare e stabilire una comunicazione con il destinatario previsto delle richieste echo. Il Binding può essere configurato e preparato dall'applicazione prima dell'inizializzazione dell'oggetto WeaveEchoClient, oppure può essere lasciato non preparato, nel qual caso WeaveEchoClient richiederà la preparazione on demand dell'associazione (per i dettagli, vedi Binding::RequestPrepare()).
Verrà richiesta anche la preparazione on demand dell'associazione nel caso in cui l'operazione non vada a buon fine dopo il passaggio allo stato Pronto.
Modalità ripetizione invio
Il metodo SendRepeating() può essere utilizzato per impostare WeaveEchoClient in modalità Sendrepeating. In questa modalità, l'oggetto client invia una sequenza ripetuta di messaggi EchoRequest al peer a un intervallo configurato. La modalità Sendrepeating può essere annullata chiamando il metodo Stop().
Multicast e trasmissione
Un oggetto WeaveEchoClient può essere utilizzato per inviare EchoRequests a più destinatari contemporaneamente configurando l'oggetto Binding con un indirizzo di trasmissione multicast IPv6 o un indirizzo di trasmissione di rete locale IPv4 appropriato (255.255.255.255). Quando l'oggetto WeaveEchoClient rileva un indirizzo peer multicast o broadcast, entra automaticamente in modalità MultiResponse all'invio dell'EchoRequest.
In questa modalità, l'oggetto continua a rimanere in ascolto e a recapitare tutti i messaggi EchoResponse in arrivo che arrivano sullo stesso scambio. L'oggetto rimane in modalità MultiResponse fino a quando: 1) l'applicazione non chiama Stop() o Send(), 2) in modalità Sendrepeating, è il momento di inviare un'altra richiesta o 3) non viene ricevuta alcuna risposta e scade il timeout di ricezione.
Eventi API
Nel corso delle sue operazioni, l'oggetto WeaveEchoClient chiamerà l'applicazione per richiedere azioni specifiche o inviare notifiche di eventi importanti. Queste chiamate di eventi API vengono effettuate alla funzione di callback attualmente configurata nell'oggetto client. Salvo dove indicato, le applicazioni sono libere di modificare lo stato del client durante il callback di un evento. Un'eccezione generale è il metodo Shutdown() dell'oggetto, che non può mai essere chiamato durante un callback.
Vengono definiti i seguenti eventi API:
PreparePayload
WeaveEchoClient sta per formare un messaggio EchoRequest e richiede all'applicazione di fornire un payload. Se un'applicazione lo desidera, può restituire un nuovo PacketBuffer contenente i dati del payload. Se l'applicazione non gestisce questo evento, verrà inviato automaticamente un EchoRequest con un payload di lunghezza zero. L'applicazione POTREBBE NON modificare lo stato di WeaveEchoClient durante questo callback.
RequestSent
È stato inviato un messaggio EchoRequest al peer.
ResponseReceived
È stato ricevuto un messaggio EchoResponse dal peer. Gli argomenti dell'evento contengono il payload della risposta e le meta-informazioni sul messaggio di risposta.
CommunicationError
Si è verificato un errore durante la creazione o l'invio di una richiesta EchoRequest o durante l'attesa di una risposta. Esempi di errori che possono verificarsi durante l'attesa di una risposta sono errori chiave o chiusura imprevista di una connessione. Gli argomenti dell'evento contengono il motivo dell'errore.
ResponseTimeout
Non è stato ricevuto un EchoResponse nel tempo previsto. Il timeout della risposta è controllato dalla proprietà predefinitaResponseTimeout nell'oggetto Binding.
RequestAborted
Uno scambio Echo in corso è stato interrotto perché è stata effettuata una richiesta di invio di un'altra EchoRequest prima che venisse ricevuta una risposta al messaggio precedente. Questo problema può verificarsi in modalità InviaRipetizione quando arriva il momento di inviare la successiva EchoRequest. Questo può succedere anche se l'applicazione chiama Send() dopo che è stato inviato un EchoRequest, ma prima di ricevere qualsiasi risposta.
Quando l'oggetto è in modalità MultiResponse, l'evento viene soppresso se è stato ricevuto almeno un messaggio EchoResponse.
Costruttori e distruttori |
|
---|---|
WeaveEchoClient(void)
|
Tipi pubblici |
|
---|---|
EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)
|
typedefvoid(*
|
EventType{
|
enum |
State{
|
enum |
Attributi pubblici |
|
---|---|
AppState
|
void *
Un puntatore ai dati specifici dell'applicazione.
|
Funzioni pubbliche |
|
---|---|
GetBinding(void) const
|
Binding *
Restituisce un puntatore all'oggetto Binding associato a WeaveEchoClient.
|
GetEventCallback(void) const
|
EventCallback
Restituisce un puntatore alla funzione di callback dell'evento API attualmente configurata nell'oggetto WeaveEchoClient.
|
GetState(void) const
|
Recupera lo stato attuale dell'oggetto WeaveEchoClient.
|
Init(Binding *binding, EventCallback eventCallback, void *appState)
|
Inizializza un oggetto WeaveEchoClient.
|
IsSendRrepeating() const
|
bool
Restituisce true se l'oggetto WeaveEchoClient è attualmente in modalità di ripetizione di invio.
|
RequestInProgress() const
|
bool
Restituisce true se è stato inviato un EchoRequest e l'oggetto WeaveEchoClient è in attesa di risposta.
|
Send(void)
|
Invia un messaggio EchoRequest al collega.
|
Send(PacketBuffer *payloadBuf)
|
Invia un messaggio EchoRequest al peer con un payload specifico.
|
SendRepeating(uint32_t sendIntervalMS)
|
Avvia l'invio di una sequenza ripetuta di messaggi EchoRequest al collega.
|
SetEventCallback(EventCallback eventCallback)
|
void
Imposta la funzione di callback dell'evento API sull'oggetto WeaveEchoClient.
|
Shutdown(void)
|
void
Arresta un oggetto WeaveEchoClient inizializzato in precedenza.
|
Stop(void)
|
void
Interrompe qualsiasi scambio di eco in corso e annulla la modalità di ripetizione di invio.
|
Funzioni statiche pubbliche |
|
---|---|
DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
|
void
Gestore predefinito per gli eventi dell'API WeaveEchoClient.
|
Strutture |
|
---|---|
nl:: |
Parametri di input per l'evento API WeaveEchoClient. |
nl:: |
Parametri di output per l'evento API WeaveEchoClient. |
Tipi pubblici
EventCallback
void(* EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)
EventType
EventType
Proprietà | |
---|---|
kEvent_CommunicationError
|
Si è verificato un errore di comunicazione durante l'invio di una EchoRequest o l'attesa di una risposta. |
kEvent_DefaultCheck
|
Utilizzato per verificare la corretta gestione predefinita degli eventi nell'applicazione. |
kEvent_PreparePayload
|
L'applicazione deve preparare il payload per la richiesta Echo. |
kEvent_RequestAborted
|
Uno scambio Echo in corso è stato interrotto perché è stata effettuata una richiesta di avvio di un altro scambio. |
kEvent_RequestSent
|
È stato inviato un messaggio EchoRequest al peer. |
kEvent_ResponseReceived
|
È stato ricevuto un messaggio EchoResponse dal peer. |
kEvent_ResponseTimeout
|
Non è stato ricevuto un EchoResponse nel tempo previsto. |
Stato
State
Proprietà | |
---|---|
kState_Idle
|
L'oggetto client è inattivo. |
kState_NotInitialized
|
L'oggetto client non è inizializzato. |
kState_PreparingBinding
|
L'oggetto client è in attesa che l'associazione sia pronta. |
kState_RequestInProgress
|
È stato inviato un messaggio EchoRequest e l'oggetto client è in attesa di risposta. |
kState_WaitingToSend
|
SendRepeating() è stata chiamata e l'oggetto client attende che la prossima volta invii una EchoRequest. |
Attributi pubblici
AppState
void * AppState
Un puntatore ai dati specifici dell'applicazione.
Funzioni pubbliche
GetBinding
Binding * GetBinding( void ) const
Restituisce un puntatore all'oggetto Binding associato a WeaveEchoClient.
GetEventCallback
EventCallback GetEventCallback( void ) const
Restituisce un puntatore alla funzione di callback dell'evento API attualmente configurata nell'oggetto WeaveEchoClient.
Inizia
WEAVE_ERROR Init( Binding *binding, EventCallback eventCallback, void *appState )
Inizializza un oggetto WeaveEchoClient.
Inizializza un oggetto WeaveEchoClient in vista dell'invio di messaggi eco a un peer.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
IsSendRrepeating
bool IsSendRrepeating() const
Restituisce true se l'oggetto WeaveEchoClient è attualmente in modalità di ripetizione di invio.
RequestInProgress
bool RequestInProgress() const
Restituisce true se è stato inviato un EchoRequest e l'oggetto WeaveEchoClient è in attesa di risposta.
Invia
WEAVE_ERROR Send( void )
Invia un messaggio EchoRequest al collega.
Questo metodo avvia il processo di invio di un messaggio EchoRequest al nodo peer. Se e quando viene ricevuto un messaggio EchoResponse corrispondente, questo verrà consegnato all'applicazione tramite l'evento API ResponseReceived.
Durante la creazione del messaggio EchoRequest, WeaveEchoClient invia una richiesta all'applicazione tramite l'evento API PreparePayload per preparare il payload del messaggio.
Se l'oggetto Binding non è in stato Pronto quando viene chiamato questo metodo, verrà inviata una richiesta al metodo Binding::RequestPrepare() per avviare la preparazione on demand. L'operazione di invio verrà quindi messa in coda fino al completamento del processo. La profondità massima di questa coda è uno. Pertanto, qualsiasi chiamata a Send() mentre è presente un invio precedente in coda comporterà l'invio di una singola EchoRequest.
La chiamata a Send() mentre WeaveEchoClient è in modalità di ripetizione di invio (ossia a causa di una precedente chiamata a SendRepeating()) ha l'effetto di accelerare e reimpostare il ciclo di invio, ma non fa uscire WeaveEchoClient dalla modalità di ripetizione di invio.
Invia
WEAVE_ERROR Send( PacketBuffer *payloadBuf )
Invia un messaggio EchoRequest al peer con un payload specifico.
Questo metodo avvia il processo di invio di un messaggio EchoRequest al nodo peer. I contenuti del buffer del payload fornito verranno inviati al peer come payload del messaggio EchoRequest. Se e quando viene ricevuto un messaggio EchoResponse corrispondente, questo verrà consegnato all'applicazione tramite l'evento API ResponseReceived.
Al momento della chiamata di questo metodo, la proprietà del buffer del payload fornito passa all'oggetto WeaveEchoClient, che ha la responsabilità di liberarlo. Questo vale indipendentemente dal fatto che il metodo venga completato correttamente o con un errore.
Se l'oggetto Binding non è in stato Pronto quando viene chiamato questo metodo, verrà inviata una richiesta al metodo Binding::RequestPrepare() per avviare la preparazione on demand. L'operazione di invio verrà quindi messa in coda fino al completamento del processo. La profondità massima di questa coda è uno. Pertanto, qualsiasi chiamata a Send() mentre è presente un invio precedente in coda comporterà l'invio di una singola EchoRequest.
La chiamata a Send() mentre WeaveEchoClient è in modalità di ripetizione di invio (ossia a causa di una precedente chiamata a SendRepeating()) ha l'effetto di accelerare e reimpostare il ciclo di invio, ma non fa uscire WeaveEchoClient dalla modalità di ripetizione di invio.
Dettagli | |||
---|---|---|---|
Parametri |
|
SendRepeating
WEAVE_ERROR SendRepeating( uint32_t sendIntervalMS )
Avvia l'invio di una sequenza ripetuta di messaggi EchoRequest al collega.
Questo metodo avvia un processo ripetuto di invio dei messaggi EchoRequest al peer. Quando i messaggi EchoResponse vengono ricevuti dal peer, vengono recapitati all'applicazione tramite l'evento API ResponseReceived.
Quando viene chiamato SendRepeating(), WeaveEchoClient entra in modalità di ripetizione di invio in cui rimane finché non viene chiamato Stop() o non si verifica un errore Binding. Chiamare SendRepeating() più volte ha l'effetto di reimpostare il ciclo di invio e aggiornare l'intervallo.
L'invio iniziale di una sequenza avviene nel momento in cui viene chiamata SendRepeating() oppure ogni volta che l'Binding diventa pronta dopo la chiamata di SendRepeating() (vedi di seguito). Gli invii successivi avvengono successivamente all'intervallo specificato.
Ogni volta che si verifica un invio, WeaveEchoClient invia una richiesta all'applicazione tramite l'evento API PreparePayload per preparare il payload del messaggio.
Se l'oggetto Binding non è in stato Pronto quando è il momento di inviare un messaggio, verrà inviata una richiesta al metodo Binding::RequestPrepare() per avviare la preparazione on demand. Eventuali ulteriori invii di messaggi ripetuti verranno messi in pausa fino al completamento del processo. Un errore durante la preparazione di Binding on demand farà sì che WeaveEchoClient abbandoni la modalità di ripetizione di invio.
SetEventCallback
void SetEventCallback( EventCallback eventCallback )
Imposta la funzione di callback dell'evento API sull'oggetto WeaveEchoClient.
Arresto
void Shutdown( void )
Arresta un oggetto WeaveEchoClient inizializzato in precedenza.
Tieni presente che questo metodo può essere chiamato solo se il metodo Init() è stato chiamato in precedenza.
Interrompi
void Stop( void )
Interrompe qualsiasi scambio di eco in corso e annulla la modalità di ripetizione di invio.
WeaveEchoClient
WeaveEchoClient( void )
Funzioni statiche pubbliche
DefaultEventHandler
void DefaultEventHandler( void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam )
Gestore predefinito per gli eventi dell'API WeaveEchoClient.
Le applicazioni devono chiamare questo metodo per tutti gli eventi API che non riconoscono o non gestiscono. I parametri forniti devono essere gli stessi passati dall'oggetto client alla funzione gestore di eventi dell'applicazione.
Dettagli | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametri |
|