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) typedef
void(*
EventType{
  kEvent_PreparePayload = 1,
  kEvent_RequestSent = 2,
  kEvent_ResponseReceived = 3,
  kEvent_CommunicationError = 4,
  kEvent_ResponseTimeout = 5,
  kEvent_RequestAborted = 6,
  kEvent_DefaultCheck = 100
}
énum
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
énum

Attributs publics

AppState
void *
Pointeur vers les données spécifiques à l'application.

Fonctions publiques

GetBinding(void) const
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::Weave::Profiles::Echo_Next::WeaveEchoClient::InEventParam

Paramètres d'entrée pour l'événement d'API WeaveEchoClient.

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

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.

GetState

State GetState(
  void
) const 

Récupérez l'état actuel de 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
[in] binding
Un objet Binding qui sera utilisé pour établir la communication avec le nœud pair.
[in] eventCallback
Pointeur vers une fonction qui sera appelée par l'objet WeaveEchoClient pour envoyer des événements d'API à l'application.
[in] appState
Pointeur vers un objet défini par l'application qui sera renvoyé à l'application chaque fois qu'un événement d'API se produit.

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
[in] payloadBuf
Objet PacketBuffer contenant des données de charge utile à envoyer au pair. Dans tous les cas, la propriété de ce tampon est transmise à l'objet WeaveEchoClient.

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
[in] appState
Pointeur vers les informations d'état définies par l'application associées à l'objet client.
[in] eventType
ID de l'événement transmis par le rappel d'événement
[in] inParam
Référence des paramètres d'événement d'entrée transmis par le rappel d'événement
[in] outParam
Référence des paramètres d'événement de sortie transmis par le rappel d'événement