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.
Résumé
La classe WeaveEchoClient implémente le côté "initiateur" du protocole Weave Echo. À l'instar du protocole ping ICMP, le protocole Weave Echo peut être utilisé pour tester l'activité et la maniabilité d'un nœud Weave.
Les applications peuvent utiliser la classe WeaveEchoClient pour envoyer des messages EchoRequest uniques ou répétés à un nœud pair identifié par un objet Binding. Une classe correspondante existe pour répondre aux requêtes d'écho (voir WeaveEchoServer).
Liaison client
WeaveEchoClient utilise un objet Binding Weave qui permet d'identifier et d'établir la communication avec le destinataire prévu des requêtes d'écho. La Binding peut être configurée et préparée par l'application avant l'initialisation de l'objet WeaveEchoClient. Elle peut aussi ne pas être préparée, auquel cas le WeaveEchoClient demandera la préparation de la liaison à la demande (voir Binding::RequestPrepare() pour plus de détails).
La préparation à la demande de la liaison sera également demandée en cas d'échec après son passage à l'état "Prêt".
Mode SendRepeating
La méthode SendRepeating() peut être utilisée pour passer WeaveEchoClient en mode SendRepeating. Dans ce mode, l'objet client envoie une séquence répétée de messages EchoRequest au pair à un intervalle configuré. Vous pouvez annuler le mode SendRepeating en appelant la méthode Stop().
Multidiffusion et diffusion
Un objet WeaveEchoClient peut être utilisé pour envoyer simultanément des requêtes EchoRequest à plusieurs destinataires en configurant l'objet Binding avec une adresse de multidiffusion IPv6 ou une adresse de diffusion réseau locale IPv4 (255.255.255.255) appropriée. Lorsque l'objet WeaveEchoClient détecte une adresse homologue de diffusion ou de multidiffusion, il passe automatiquement en mode MultiResponse lors de l'envoi de la requête EchoRequest.
Dans ce mode, l'objet continue d'écouter et de distribuer tous les messages EchoResponse entrants qui arrivent sur le même échange. L'objet reste en mode MultiResponse jusqu'à ce que: 1) l'application appelle Stop() ou Send(), 2) soit en mode SendRepeating, que le temps d'envoyer une autre requête, ou 3) qu'aucune réponse ne soit reçue et que le délai de réception expire.
Événements de l'API
Au cours de son fonctionnement, l'objet WeaveEchoClient appelle l'application pour demander des actions spécifiques ou envoyer des notifications en cas d'événements importants. Ces appels d'événements d'API sont effectués vers la fonction de rappel actuellement configurée sur l'objet client. Sauf indication contraire, les applications sont libres de modifier l'état du client lors d'un rappel d'événement. La méthode Shutdown() de l'objet constitue une exception générale, car elle peut ne jamais être appelée lors d'un rappel.
Les événements d'API suivants sont définis:
PreparePayload
Le client WeaveEchoClient est sur le point de former un message EchoRequest et demande à l'application de fournir une charge utile. Si une application le souhaite, elle peut renvoyer un nouveau PacketBuffer contenant les données de la charge utile. Si l'application ne gère pas cet événement, une EchoRequest avec une charge utile de longueur nulle sera envoyée automatiquement. L'application NE peut PAS modifier l'état du WeaveEchoClient pendant ce rappel.
RequestSent
Un message EchoRequest a été envoyé au pair.
ResponseReceived
Un message EchoResponse a été reçu du pair. Les arguments de l'événement contiennent la charge utile de la réponse et des méta-informations sur le message de réponse.
CommunicationError
Une erreur s'est produite lors de la création ou de l'envoi d'une requête EchoRequest, ou lors de l'attente d'une réponse. Des exemples d'erreurs qui peuvent se produire en attendant une réponse sont les erreurs clés ou la fermeture inattendue d'une connexion. Les arguments de l'événement contiennent le motif de l'erreur.
ResponseTimeout
Aucune réponse EchoResponse n'a été reçue dans les délais impartis. Le délai avant expiration de la réponse est contrôlé par la propriété DefaultResponseTimeout de l'objet Binding.
RequestAborted
Un échange d'écho en cours a été annulé, car une requête a été effectuée pour envoyer une autre requête EchoRequest avant la réception d'une réponse au message précédent. Cela peut se produire en mode SendRepeating lorsque l'heure d'envoi de la prochaine EchoRequest arrive. Cela peut également se produire si l'application appelle Send() après l'envoi d'une requête EchoRequest, mais avant la réception de la réponse.
Lorsque l'objet est en mode MultiResponse, l'événement est supprimé si au moins un message EchoResponse a été reçu.
Constructeurs et destructeurs |
|
---|---|
WeaveEchoClient(void)
|
Types publics |
|
---|---|
EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)
|
typedefvoid(*
|
EventType{
|
énum |
State{
|
énum |
Attributs publics |
|
---|---|
AppState
|
void *
Pointeur vers les données spécifiques à l'application.
|
Fonctions publiques |
|
---|---|
GetBinding(void) const
|
Binding *
Renvoie un pointeur vers l'objet Binding associé à WeaveEchoClient.
|
GetEventCallback(void) const
|
EventCallback
Renvoie un pointeur vers la fonction de rappel d'événement d'API actuellement configurée sur l'objet WeaveEchoClient.
|
GetState(void) const
|
Récupérez l'état actuel de l'objet WeaveEchoClient.
|
Init(Binding *binding, EventCallback eventCallback, void *appState)
|
Initialisez un objet WeaveEchoClient.
|
IsSendRrepeating() const
|
bool
Renvoie la valeur "true" si l'objet WeaveEchoClient est actuellement en mode d'envoi répété.
|
RequestInProgress() const
|
bool
Renvoie la valeur "true" si une requête EchoRequest a été envoyée et si l'objet WeaveEchoClient attend une réponse.
|
Send(void)
|
Envoyer un message EchoRequest au pair.
|
Send(PacketBuffer *payloadBuf)
|
Envoyer un message EchoRequest au pair avec une charge utile spécifique.
|
SendRepeating(uint32_t sendIntervalMS)
|
Active l'envoi d'une séquence répétée de messages EchoRequest au pair.
|
SetEventCallback(EventCallback eventCallback)
|
void
Définit la fonction de rappel d'événement d'API sur l'objet WeaveEchoClient.
|
Shutdown(void)
|
void
Arrêtez un objet WeaveEchoClient précédemment initialisé.
|
Stop(void)
|
void
Arrête tout échange d'écho en cours et annule le mode d'envoi répété.
|
Fonctions statiques publiques |
|
---|---|
DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
|
void
Gestionnaire par défaut pour les événements de l'API WeaveEchoClient
|
Structs |
|
---|---|
nl:: |
Paramètres d'entrée pour l'événement d'API WeaveEchoClient. |
nl:: |
Paramètres de sortie dans l'événement d'API WeaveEchoClient. |
Types publics
EventCallback
void(* EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)
EventType
EventType
Propriétés | |
---|---|
kEvent_CommunicationError
|
Une erreur de communication s'est produite lors de l'envoi d'une requête EchoRequest ou de l'attente d'une réponse. |
kEvent_DefaultCheck
|
Permet de vérifier que la gestion des événements par défaut est correcte dans l'application. |
kEvent_PreparePayload
|
L'application est invitée à préparer la charge utile pour la requête Echo. |
kEvent_RequestAborted
|
Un échange d'écho en cours a été abandonné, car une requête a été effectuée pour démarrer un autre échange. |
kEvent_RequestSent
|
Un message EchoRequest a été envoyé au pair. |
kEvent_ResponseReceived
|
Un message EchoResponse a été reçu du pair. |
kEvent_ResponseTimeout
|
Aucune réponse EchoResponse n'a été reçue dans les délais impartis. |
État
State
Propriétés | |
---|---|
kState_Idle
|
L'objet client est inactif. |
kState_NotInitialized
|
L'objet client n'est pas initialisé. |
kState_PreparingBinding
|
L'objet client attend que la liaison soit prête. |
kState_RequestInProgress
|
Un message EchoRequest a été envoyé et l'objet client attend une réponse. |
kState_WaitingToSend
|
SendRepeating() a été appelé et l'objet client attend la prochaine fois que vous envoyez une EchoRequest. |
Attributs publics
AppState
void * AppState
Pointeur vers les données spécifiques à l'application.
Fonctions publiques
GetBinding
Binding * GetBinding( void ) const
Renvoie un pointeur vers l'objet Binding associé à WeaveEchoClient.
GetEventCallback
EventCallback GetEventCallback( void ) const
Renvoie un pointeur vers la fonction de rappel d'événement d'API actuellement configurée sur l'objet WeaveEchoClient.
Init
WEAVE_ERROR Init( Binding *binding, EventCallback eventCallback, void *appState )
Initialisez un objet WeaveEchoClient.
Initialisez un objet WeaveEchoClient en vue de l'envoi de messages d'écho à un pair.
Détails | |||||||
---|---|---|---|---|---|---|---|
Paramètres |
|
IsSendRrepeating
bool IsSendRrepeating() const
Renvoie la valeur "true" si l'objet WeaveEchoClient est actuellement en mode d'envoi répété.
RequestInProgress
bool RequestInProgress() const
Renvoie la valeur "true" si une requête EchoRequest a été envoyée et si l'objet WeaveEchoClient attend une réponse.
Envoyer
WEAVE_ERROR Send( void )
Envoyer un message EchoRequest au pair.
Cette méthode lance le processus d'envoi d'un message EchoRequest au nœud pair. Si et lorsqu'un message EchoResponse correspondant est reçu, celui-ci est transmis à l'application via l'événement d'API ResponseReceived.
Lors de la création du message EchoRequest, le WeaveEchoClient envoie une requête à l'application, via l'événement API PreparePayload, pour préparer la charge utile du message.
Si l'objet Binding n'est pas à l'état "Prêt" lorsque cette méthode est appelée, une requête est envoyée à la méthode Binding::RequestPrepare() pour lancer la préparation à la demande. L'opération d'envoi est alors mise en file d'attente jusqu'à la fin du processus. La profondeur maximale de cette file d'attente est de un. Ainsi, tout appel à Send() alors qu'il y a un envoi précédent dans la file d'attente n'entraînera l'envoi qu'une seule requête EchoRequest.
L'appel de Send() lorsque WeaveEchoClient est en mode de répétition d'envoi (en raison d'un appel précédent à SendRepeating()) a pour effet d'accélérer et de réinitialiser le cycle d'envoi, mais ne désactive pas le mode de répétition d'envoi pour le WeaveEchoClient.
Envoyer
WEAVE_ERROR Send( PacketBuffer *payloadBuf )
Envoyer un message EchoRequest au pair avec une charge utile spécifique.
Cette méthode lance le processus d'envoi d'un message EchoRequest au nœud pair. Le contenu du tampon de charge utile fourni sera envoyé au pair en tant que charge utile du message EchoRequest. Si et lorsqu'un message EchoResponse correspondant est reçu, celui-ci est transmis à l'application via l'événement d'API ResponseReceived.
Lors de l'appel de cette méthode, la propriété du tampon de charge utile fourni est transmise à l'objet WeaveEchoClient, qui a la responsabilité de le libérer. Cela est vrai que la méthode aboutisse ou qu'elle génère une erreur.
Si l'objet Binding n'est pas à l'état "Prêt" lorsque cette méthode est appelée, une requête est envoyée à la méthode Binding::RequestPrepare() pour lancer la préparation à la demande. L'opération d'envoi est alors mise en file d'attente jusqu'à la fin du processus. La profondeur maximale de cette file d'attente est de un. Ainsi, tout appel à Send() alors qu'il y a un envoi précédent dans la file d'attente n'entraînera l'envoi qu'une seule requête EchoRequest.
L'appel de Send() lorsque WeaveEchoClient est en mode de répétition d'envoi (en raison d'un appel précédent à SendRepeating()) a pour effet d'accélérer et de réinitialiser le cycle d'envoi, mais ne désactive pas le mode de répétition d'envoi pour le WeaveEchoClient.
Détails | |||
---|---|---|---|
Paramètres |
|
SendRepeating
WEAVE_ERROR SendRepeating( uint32_t sendIntervalMS )
Active l'envoi d'une séquence répétée de messages EchoRequest au pair.
Cette méthode lance un processus répété d'envoi de messages EchoRequest au pair. À mesure que les messages EchoResponse sont reçus du pair, ils sont transmis à l'application via l'événement d'API ResponseReceived.
Lorsque SendRepeating() est appelé, WeaveEchoClient passe en mode d'envoi de répétition, dans lequel il reste jusqu'à ce que Stop() soit appelé ou qu'une erreur Binding se produise. Appeler SendRepeating() plusieurs fois a pour effet de réinitialiser le cycle d'envoi et de mettre à jour l'intervalle.
L'envoi initial d'une séquence a lieu au moment où SendRepeating() est appelé ou chaque fois que Binding est prêt après l'appel de SendRepeating() (voir ci-dessous). Les envois suivants s'effectuent ensuite à l'intervalle spécifié.
Chaque fois qu'un envoi se produit, WeaveEchoClient envoie une requête à l'application, via l'événement API PreparePayload, pour préparer la charge utile du message.
Si l'objet Binding (Liaison) n'est pas prêt au moment d'envoyer un message, une requête est envoyée à la méthode Binding::RequestPrepare() afin de lancer la préparation à la demande. Les envois répétés de messages seront suspendus jusqu'à la fin de ce processus. En cas d'échec de la préparation de la liaison à la demande, WeaveEchoClient quitte le mode d'envoi répété.
SetEventCallback
void SetEventCallback( EventCallback eventCallback )
Définit la fonction de rappel d'événement d'API sur l'objet WeaveEchoClient.
Arrêt
void Shutdown( void )
Arrêtez un objet WeaveEchoClient précédemment initialisé.
Notez que cette méthode ne peut être appelée que si la méthode Init() a déjà été appelée.
Arrêter
void Stop( void )
Arrête tout échange d'écho en cours et annule le mode d'envoi répété.
WeaveEchoClient
WeaveEchoClient( void )
Fonctions statiques publiques
DefaultEventHandler
void DefaultEventHandler( void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam )
Gestionnaire par défaut pour les événements de l'API WeaveEchoClient
Les applications doivent appeler cette méthode pour tous les événements d'API qu'elles ne reconnaissent ou ne gèrent pas. Les paramètres fournis doivent être identiques à ceux transmis par l'objet client à la fonction de gestionnaire d'événements de l'application.
Détails | |||||||||
---|---|---|---|---|---|---|---|---|---|
Paramètres |
|