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é initie du protocole Weave Echo. Tout comme le protocole ping ICMP, le protocole Weave Echo peut être utilisé pour tester l'activité et la joignabilité d'un nœud Weave.

Les applications peuvent utiliser la classe WeaveEchoClient pour envoyer des messages EchoRequest ponctuels ou répétés à un nœud pair identifié par un objet Binding. Il existe une classe correspondante permettant de répondre aux requêtes d'écho (voir WeaveEchoServer).

Liaison client

Le WeaveEchoClient utilise un objet de liaison Weave qui permet d'identifier et d'établir la communication avec le destinataire des requêtes d'écho. La liaison peut être configurée et préparée par l'application avant l'initialisation de l'objet WeaveEchoClient, ou peut être laissée non préparée, auquel cas le WeaveEchoClient demandera la préparation de la liaison à la demande (voir Binding::RequestPrepare() pour plus d'informations).

La préparation à la demande de la liaison est également demandée en cas d'échec de l'opération après être passé à l'état Prêt.

Mode de répétition d'envoi

La méthode SendRepeating() peut être utilisée pour mettre le 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 des EchoRequests à plusieurs destinataires simultanément en configurant l'objet Binding avec une adresse de multidiffusion IPv6 ou une adresse de diffusion sur le réseau local IPv4 (255.255.255.255). Lorsque l'objet WeaveEchoClient détecte une adresse de pair de diffusion ou de multidiffusion, il passe automatiquement en mode multiréponse lors de l'envoi de l'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 multiréponse jusqu'à ce que: 1) l'application appelle Stop() ou Send(), 2) en mode SendRepeating, 3) aucune réponse ne soit reçue et le délai d'expiration à la 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 d'événements importants. Ces appels d'événements d'API sont envoyés à 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. Une exception globale est la méthode Shutdown() de l'objet, qui peut ne jamais être appelée lors d'un rappel.

Les événements d'API suivants sont définis:

PreparePayload

Le 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 PaquetBuffer contenant les données de la charge utile. Si l'application ne gère pas cet événement, une requête EchoRequest avec une charge utile de longueur nulle est envoyée automatiquement. L'application NE PEUT PAS modifier l'état du WeaveEchoClient lors de 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 formation ou de l'envoi d'une requête EchoRequest, ou pendant l'attente d'une réponse. Les erreurs clés ou la fermeture inattendue d'une connexion sont des exemples d'erreurs qui peuvent se produire en attendant une réponse. Les arguments de l'événement contiennent le motif de l'erreur.

ResponseTimeout

Aucune réponse EchoResponse n'a été reçue dans le temps imparti. Le délai avant expiration de la réponse est contrôlé par la propriété DefaultResponseTimeout de l'objet Binding.

RequestAborted

Un échange Echo en cours a été annulé, car une demande a été effectuée pour envoyer une autre demande EchoRequest avant la réception d’une réponse au message précédent. Cela peut se produire en mode SendRepeating lorsque l'heure arrive pour envoyer la prochaine EchoRequest. 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 toute 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
}
enum
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
enum

Attributs publics

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

Fonctions publiques

GetBinding(void) const
Renvoie un pointeur vers l'objet Binding associé au 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ère 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 en mode de répétition d'envoi.
RequestInProgress() const
bool
Renvoie la valeur "true" si une requête EchoRequest a été envoyée et que 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)
Initiez 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êter un objet WeaveEchoClient précédemment initialisé.
Stop(void)
void
Arrête tout échange d'écho en cours et annule le mode de répétition d'envoi.

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 de 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'un EchoRequest ou de l'attente d'une réponse.

kEvent_DefaultCheck

Permet de vérifier que les événements par défaut sont correctement gérés dans l'application.

kEvent_PreparePayload

L'application est invitée à préparer la charge utile pour la requête Echo.

kEvent_RequestAborted

Un échange Echo en cours a été annulé, car une demande a été envoyé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 le temps imparti.

É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 qu'il enverra un EchoRequest.

Attributs publics

AppState

void * AppState

Pointeur vers des données spécifiques à l'application.

Fonctions publiques

GetBinding

Binding * GetBinding(
  void
) const 

Renvoie un pointeur vers l'objet Binding associé au 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ère 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 fournir les événements d'API à l'application.
[in] appState
Pointeur vers un objet défini par l'application, qui est 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 en mode de répétition d'envoi.

RequestInProgress

bool RequestInProgress() const 

Renvoie la valeur "true" si une requête EchoRequest a été envoyée et que 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 un message EchoResponse correspondant est reçu, il est transmis à l'application via l'événement d'API ResponseReceived.

Lors de la formation du message EchoRequest, le WeaveEchoClient envoie une requête à l'application, via l'événement d'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 existe un envoi précédent dans la file d'attente n'entraînera qu'un seul envoi d'EchoRequest.

Appeler Send() alors que le WeaveEchoClient est en mode de répétition d'envoi (par exemple, 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 fait pas sortir le WeaveEchoClient du mode de répétition d'envoi.

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 un message EchoResponse correspondant est reçu, il est transmis à l'application via l'événement d'API ResponseReceived.

Lorsque cette méthode est appelée, la propriété du tampon de charge utile fournie est transférée à l'objet WeaveEchoClient, qui a la responsabilité de le libérer. Cela est vrai, que la méthode aboutisse ou qu'une erreur se soit produite.

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 de ce processus. La profondeur maximale de cette file d'attente est de un. Ainsi, tout appel à Send() alors qu'il existe un envoi précédent dans la file d'attente n'entraînera qu'un seul envoi d'EchoRequest.

Appeler Send() alors que le WeaveEchoClient est en mode de répétition d'envoi (par exemple, 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 fait pas sortir le WeaveEchoClient du mode de répétition d'envoi.

Détails
Paramètres
[in] payloadBuf
Objet PacketBuffer contenant des données de charge utile à envoyer au pair. La propriété de ce tampon est transmise à l'objet WeaveEchoClient dans tous les cas.

SendRepeating

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

Initiez 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. Au fur et à 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é, le WeaveEchoClient passe en mode de répétition d'envoi, dans lequel il reste jusqu'à ce que Stop() soit appelé ou qu'une erreur de liaison se produise. Le fait d'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 se produit au moment de l'appel de SendRepeating() ou de Binding après l'appel de SendRepeating() (voir ci-dessous). Les envois suivants se produisent ensuite à l'intervalle spécifié.

À chaque envoi, le WeaveEchoClient envoie une requête à l'application, via l'événement d'API PreparePayload, pour préparer la charge utile du message.

Si l'objet Binding n'est pas à l'état "Ready" (Prêt) au moment d'envoyer un message, une requête est envoyée à la méthode Binding::RequestPrepare() pour lancer la préparation à la demande. Les envois de messages répétés seront interrompus jusqu'à la fin de ce processus. En cas d'échec de la préparation de la liaison Binding à la demande, le WeaveEchoClient quittera le mode de répétition d'envoi.

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êter 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 de répétition d'envoi.

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 d'é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