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.

Podsumowanie

Klasa WeaveEchoClient implementuje po stronie inicjatora protokołu Weave Echo. Podobnie jak protokół ping ICMP, protokół Weave Echo może być używany do testowania żywotności i osiągalności węzła Weave.

Aplikacje mogą używać klasy WeaveEchoClient do wysyłania jednorazowych lub powtarzanych wiadomości EchoRequest do węzła równorzędnego zidentyfikowanego przez obiekt Binding. Istnieje klasa odpowiadająca na żądania echa (patrz WeaveEchoServer).

Wiązanie klienta

WeaveEchoClient wykorzystuje obiekt Weave Binding, który służy do identyfikowania docelowego odbiorcy żądań echa i nawiązywania z nim komunikacji. Obiekt Binding można skonfigurować i przygotować w aplikacji przed zainicjowaniem obiektu WeaveEchoClient. Może też być nieprzygotowane. W takim przypadku WeaveEchoClient poprosi o przygotowanie powiązania na żądanie (szczegóły znajdziesz w sekcji Binding::RequestPrepare()).

Jeśli nie uda się przeprowadzić procesu wiązania na żądanie, konieczne będzie też przygotowanie go na żądanie.

Tryb powtarzania wysyłania

Za pomocą metody SendRepeating() można umieścić obiekt WeaveEchoClient w trybie SendRepeating. W tym trybie obiekt klienta wysyła do peera powtarzającą się sekwencję wiadomości EchoRequest w skonfigurowanym czasie. Tryb wysyłania powtarzania można anulować, wywołując metodę Stop().

Multicast i transmisja

Obiekt WeaveEchoClient może służyć do jednoczesnego wysyłania żądań EchoRequest do wielu odbiorców przez skonfigurowanie obiektu Binding za pomocą odpowiedniego adresu multiemisji IPv6 lub adresu IPv4 sieci lokalnej (255.255.255.255). Gdy obiekt WeaveEchoClient wykryje adres multiemisji lub transmisji peera, automatycznie przechodzi w tryb MultiResponse po wysłaniu EchoRequest.

W tym trybie obiekt nadal nasłuchuje i dostarcza wszystkie przychodzące wiadomości EchoResponse, które pochodzą z tej samej wymiany. Obiekt pozostaje w trybie wielu odpowiedzi, dopóki: 1) aplikacja nie wywoła funkcji Stop() lub Send(), 2) w trybie SendRepeating, dopóki nie nadejdzie czas na wysłanie kolejnego żądania lub 3) nie otrzyma żadnej odpowiedzi i upłynie czas oczekiwania na odebranie.

Zdarzenia API

W trakcie działania obiekt WeaveEchoClient wywołuje tę aplikację, aby zażądać określonych działań lub dostarczać powiadomienia o ważnych zdarzeniach. Te wywołania zdarzeń interfejsu API są wykonywane do obecnie skonfigurowanej funkcji wywołania zwrotnego w obiekcie klienckim. O ile nie wskazano inaczej, aplikacje mogą zmieniać stan klienta podczas wywołania zwrotnego zdarzenia. Jednym z ogólnych wyjątków jest metoda Shutdown() obiektu, która nie może zostać wywołana podczas wywołania zwrotnego.

Zdefiniowano te zdarzenia interfejsu API:

PreparePayload

WeaveEchoClient utworzy wiadomość EchoRequest i żąda do aplikacji ładunku. Jeśli aplikacja będzie tego wymagać, może zwrócić nowy bufor pakietów zawierający dane ładunku. Jeśli aplikacja nie obsługuje tego zdarzenia, automatycznie zostanie wysłane żądanie EchoRequest z ładunkiem o zerowej długości. W trakcie tego wywołania zwrotnego aplikacja NIE MOŻE zmieniać stanu obiektu WeaveEchoClient.

RequestSent

Wiadomość EchoRequest została wysłana do peera.

ResponseReceived

Odebrano wiadomość EchoResponse od połączenia równorzędnego. Argumenty zdarzenia zawierają ładunek odpowiedzi i metainformacje o wiadomości z odpowiedzią.

CommunicationError

Podczas tworzenia lub wysyłania żądania EchoRequest albo podczas oczekiwania na odpowiedź wystąpił błąd. Przykładami błędów, które mogą wystąpić podczas oczekiwania na odpowiedź, są kluczowe błędy lub nieoczekiwane zakończenie połączenia. Argumenty zdarzenia zawierają przyczynę błędu.

ResponseTimeout

Odpowiedź Echo nie została odebrana w przydzielonym czasie. Limit czasu odpowiedzi jest określany przez właściwość DomyślnieResponseTimeout w obiekcie Binding.

RequestAborted

Wymiana echa w toku została przerwana, ponieważ wysłano żądanie wysłania innego żądania EchoRequest, zanim otrzymano odpowiedź na poprzednią wiadomość. Może się to pojawić w trybie SendRepeating, gdy nadejdzie czas wysłania następnego żądania EchoRequest. Może się tak również zdarzyć, jeśli aplikacja wywoła funkcję Send() po wysłaniu żądania EchoRequest, ale przed otrzymaniem odpowiedzi.

Gdy obiekt jest w trybie wielu odpowiedzi, zdarzenie jest pomijane, jeśli otrzyma co najmniej 1 wiadomość EchoResponse.

Konstruktorzy i niszczyciele

WeaveEchoClient(void)

Typy publiczne

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 | typ wyliczeniowy
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
enum | typ wyliczeniowy

Atrybuty publiczne

AppState
void *
Wskaźnik do danych specyficznych dla aplikacji.

Funkcje publiczne

GetBinding(void) const
Zwraca wskaźnik do obiektu Binding powiązanego z parametrem WeaveEchoClient.
GetEventCallback(void) const
EventCallback
Zwraca wskaźnik do funkcji wywołania zwrotnego zdarzenia interfejsu API, która jest obecnie skonfigurowana w obiekcie WeaveEchoClient.
GetState(void) const
Pobierz bieżący stan obiektu WeaveEchoClient.
Init(Binding *binding, EventCallback eventCallback, void *appState)
Zainicjuj obiekt WeaveEchoClient.
IsSendRrepeating() const
bool
Zwraca wartość „prawda”, jeśli obiekt WeaveEchoClient jest obecnie w trybie powtarzania wysyłania.
RequestInProgress() const
bool
Zwraca wartość „true” (prawda), jeśli żądanie EchoRequest zostało wysłane, a obiekt WeaveEchoClient czeka na odpowiedź.
Send(void)
Wyślij wiadomość EchoRequest do peera.
Send(PacketBuffer *payloadBuf)
Wyślij do peera wiadomość EchoRequest z określonym ładunkiem.
SendRepeating(uint32_t sendIntervalMS)
Zainicjuj powtarzanie sekwencji komunikatów EchoRequest do peera.
SetEventCallback(EventCallback eventCallback)
void
Ustawia funkcję wywołania zwrotnego zdarzenia interfejsu API w obiekcie WeaveEchoClient.
Shutdown(void)
void
Wyłącz zainicjowany wcześniej obiekt WeaveEchoClient.
Stop(void)
void
Zatrzymuje trwającą wymianę echa i anuluje tryb powtarzania wysyłania.

Publiczne funkcje statyczne

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
Domyślny moduł obsługi zdarzeń interfejsu API WeaveEchoClient.

Konstrukcja

nl::Weave::Profiles::Echo_Next::WeaveEchoClient::InEventParam

Parametry wejściowe zdarzenia interfejsu API WeaveEchoClient.

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

Parametry wyjściowe do zdarzenia interfejsu API WeaveEchoClient.

Typy publiczne

EventCallback

void(* EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)

EventType

 EventType
Właściwości
kEvent_CommunicationError

Podczas wysyłania żądania EchoRequest lub oczekiwania na odpowiedź wystąpił błąd komunikacji.

kEvent_DefaultCheck

Służy do weryfikowania prawidłowej domyślnej obsługi zdarzeń w aplikacji.

kEvent_PreparePayload

Aplikacja otrzyma prośbę o przygotowanie ładunku na żądanie Echo.

kEvent_RequestAborted

Wymiana echa w toku została przerwana, ponieważ wysłano żądanie rozpoczęcia innej wymiany.

kEvent_RequestSent

Wiadomość EchoRequest została wysłana do peera.

kEvent_ResponseReceived

Odebrano wiadomość EchoResponse od połączenia równorzędnego.

kEvent_ResponseTimeout

Odpowiedź Echo nie została odebrana w przydzielonym czasie.

Stan

 State
Właściwości
kState_Idle

Obiekt klienta jest nieaktywny.

kState_NotInitialized

Obiekt klienta nie został zainicjowany.

kState_PreparingBinding

Obiekt klienta czeka na przygotowanie powiązania.

kState_RequestInProgress

Wysłano komunikat EchoRequest, a obiekt klienta czeka na odpowiedź.

kState_WaitingToSend

Wywołano funkcję SendRepeating(), a obiekt kliencki czeka na kolejne wysłanie żądania EchoRequest.

Atrybuty publiczne

AppState

void * AppState

Wskaźnik do danych specyficznych dla aplikacji.

Funkcje publiczne

GetBinding

Binding * GetBinding(
  void
) const 

Zwraca wskaźnik do obiektu Binding powiązanego z parametrem WeaveEchoClient.

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

Zwraca wskaźnik do funkcji wywołania zwrotnego zdarzenia interfejsu API, która jest obecnie skonfigurowana w obiekcie WeaveEchoClient.

GetState

State GetState(
  void
) const 

Pobierz bieżący stan obiektu WeaveEchoClient.

Zainicjuj

WEAVE_ERROR Init(
  Binding *binding,
  EventCallback eventCallback,
  void *appState
)

Zainicjuj obiekt WeaveEchoClient.

Przygotowując się do wysłania wiadomości echo do peera, zainicjuj obiekt WeaveEchoClient.

Szczegóły
Parametry
[in] binding
Obiekt Binding, który będzie używany do nawiązywania komunikacji z węzłem równorzędnym.
[in] eventCallback
Wskaźnik do funkcji, która będzie wywoływana przez obiekt WeaveEchoClient w celu dostarczania zdarzeń interfejsu API do aplikacji.
[in] appState
Wskaźnik do obiektu zdefiniowanego przez aplikację, który jest zwracany do aplikacji po wystąpieniu zdarzenia interfejsu API.

IsSendRrepeating

bool IsSendRrepeating() const 

Zwraca wartość „prawda”, jeśli obiekt WeaveEchoClient jest obecnie w trybie powtarzania wysyłania.

RequestInProgress

bool RequestInProgress() const 

Zwraca wartość „true” (prawda), jeśli żądanie EchoRequest zostało wysłane, a obiekt WeaveEchoClient czeka na odpowiedź.

Wyślij

WEAVE_ERROR Send(
  void
)

Wyślij wiadomość EchoRequest do peera.

Ta metoda inicjuje proces wysyłania komunikatu EchoRequest do węzła równorzędnego. Po otrzymaniu odpowiedniego komunikatu EchoResponse zostanie on dostarczony do aplikacji za pomocą zdarzenia ResponseReceived API.

Podczas tworzenia wiadomości EchoRequest WeaveEchoClient wysyła żądanie do aplikacji przez zdarzenie PreparePayload API, aby przygotować ładunek wiadomości.

Jeśli w momencie wywołania tej metody obiekt Binding nie jest w stanie gotowości, wysyłane jest żądanie do metody Binding::RequestPrepare(). Operacja wysyłania zostanie umieszczona w kolejce do momentu zakończenia tego procesu. Maksymalna głębokość tej kolejki to 1. Tak więc każde wywołanie funkcji Send(), gdy w kolejce znajduje się wcześniejsze wysłanie, spowoduje wysłanie tylko jednego żądania EchoRequest.

Wywołanie funkcji Send(), gdy WeaveEchoClient jest w trybie powtarzania wysyłania (tzn. z powodu poprzedniego wywołania SendRepeating()) ma wpływ na przyspieszenie i zresetowanie cyklu wysyłania, ale nie zabiera WeaveEchoClient z trybu powtarzania.

Wyślij

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

Wyślij do peera wiadomość EchoRequest z określonym ładunkiem.

Ta metoda inicjuje proces wysyłania komunikatu EchoRequest do węzła równorzędnego. Zawartość dostarczonego bufora ładunku zostanie wysłana do peera jako ładunek wiadomości EchoRequest. Po otrzymaniu odpowiedniego komunikatu EchoResponse zostanie on dostarczony do aplikacji za pomocą zdarzenia ResponseReceived API.

Po wywołaniu tej metody własność dostarczonego bufora ładunku jest przekazywana do obiektu WeaveEchoClient, który odpowiada za jego zwolnienie. Dzieje się tak niezależnie od tego, czy metoda zakończy się powodzeniem czy błędem.

Jeśli w momencie wywołania tej metody obiekt Binding nie jest w stanie gotowości, wysyłane jest żądanie do metody Binding::RequestPrepare(). Operacja wysyłania zostanie umieszczona w kolejce do momentu zakończenia tego procesu. Maksymalna głębokość tej kolejki to 1. Tak więc każde wywołanie funkcji Send(), gdy w kolejce znajduje się wcześniejsze wysłanie, spowoduje wysłanie tylko jednego żądania EchoRequest.

Wywołanie funkcji Send(), gdy WeaveEchoClient jest w trybie powtarzania wysyłania (tzn. z powodu poprzedniego wywołania SendRepeating()) ma wpływ na przyspieszenie i zresetowanie cyklu wysyłania, ale nie zabiera WeaveEchoClient z trybu powtarzania.

Szczegóły
Parametry
[in] payloadBuf
Obiekt PacketBuffer zawierający dane ładunku, które mają zostać wysłane do połączenia równorzędnego. Własność tego bufora jest we wszystkich przypadkach przekazywana do obiektu WeaveEchoClient.

SendRepeating

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

Zainicjuj powtarzanie sekwencji komunikatów EchoRequest do peera.

Ta metoda inicjuje powtarzający się proces wysyłania wiadomości EchoRequest do peera. Gdy komunikaty EchoResponse są odbierane z peera, są one dostarczane do aplikacji za pomocą zdarzenia ResponseReceived API.

Po wywołaniu funkcji SendRepeating() WeaveEchoClient przechodzi w tryb powtarzania wysyłania, w którym pozostaje dostępny do czasu wywołania funkcji Stop() lub wystąpienia błędu Binding. Wielokrotne wywołanie funkcji SendRepeating() skutkuje zresetowaniem cyklu wysyłania i zaktualizowaniem interwału.

Początkowe wysłanie sekwencji ma miejsce w momencie wywołania funkcji SendRepeating() lub w momencie, gdy po wywołaniu funkcji SendRepeating() funkcja Binding staje się gotowa (patrz poniżej). Kolejne operacje wysyłania mają miejsce po określonym czasie.

Za każdym razem, gdy następuje wysyłanie, WeaveEchoClient wysyła do aplikacji za pomocą zdarzenia PreparePayload API żądanie w celu przygotowania ładunku wiadomości.

Jeśli w momencie wysłania wiadomości obiekt Binding nie jest w stanie gotowości, wysyłane jest żądanie do metody Binding::RequestPrepare(). Umożliwia to rozpoczęcie przygotowania na żądanie. Do czasu zakończenia tego procesu wysyłanie kolejnych wiadomości zostanie wstrzymane. Niepowodzenie przygotowywania Binding na żądanie spowoduje, że WeaveEchoClient opuści tryb powtarzania wysyłania.

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

Ustawia funkcję wywołania zwrotnego zdarzenia interfejsu API w obiekcie WeaveEchoClient.

Wyłączono

void Shutdown(
  void
)

Wyłącz zainicjowany wcześniej obiekt WeaveEchoClient.

Pamiętaj, że tę metodę można wywołać tylko wtedy, gdy metoda Init() została wywołana wcześniej.

Zatrzymaj

void Stop(
  void
)

Zatrzymuje trwającą wymianę echa i anuluje tryb powtarzania wysyłania.

WeaveEchoClient

 WeaveEchoClient(
  void
)

Publiczne funkcje statyczne

DefaultEventHandler

void DefaultEventHandler(
  void *appState,
  EventType eventType,
  const InEventParam & inParam,
  OutEventParam & outParam
)

Domyślny moduł obsługi zdarzeń interfejsu API WeaveEchoClient.

Aplikacje muszą wywoływać tę metodę w przypadku wszystkich zdarzeń interfejsu API, których nie rozpoznają ani nie obsługują. Podane parametry muszą być takie same jak te przekazane przez obiekt klienta do funkcji modułu obsługi zdarzeń aplikacji.

Szczegóły
Parametry
[in] appState
Wskaźnik do zdefiniowanych przez aplikację informacji o stanie, które są powiązane z obiektem klienta.
[in] eventType
Identyfikator zdarzenia przekazany przez wywołanie zwrotne zdarzenia.
[in] inParam
Dokumentacja wejściowych parametrów zdarzenia przekazanych przez wywołanie zwrotne zdarzenia
[in] outParam
Odwołanie do parametrów wyjściowych zdarzenia przekazanych przez wywołanie zwrotne zdarzenia