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)
|
typedefvoid(*
|
EventType{
|
enum | typ wyliczeniowy |
State{
|
enum | typ wyliczeniowy |
Atrybuty publiczne |
|
---|---|
AppState
|
void *
Wskaźnik do danych specyficznych dla aplikacji.
|
Funkcje publiczne |
|
---|---|
GetBinding(void) const
|
Binding *
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:: |
Parametry wejściowe zdarzenia interfejsu API WeaveEchoClient. |
nl:: |
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.
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 |
|
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 |
|
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 |
|