нл:: Переплетение:: Профили:: 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.

Краткое содержание

Класс WeaveEchoClient реализует сторону инициатора протокола Weave Echo. Подобно протоколу проверки связи ICMP, протокол Weave Echo можно использовать для проверки работоспособности и доступности узла Weave.

Приложения могут использовать класс WeaveEchoClient для отправки одноразовых или повторяющихся сообщений EchoRequest на одноранговый узел, идентифицируемый объектом Binding . Для ответа на эхо-запросы существует соответствующий класс (см. WeaveEchoServer ).

Привязка клиента

WeaveEchoClient принимает объект Weave Binding , который используется для идентификации и установления связи с предполагаемым получателем эхо-запросов. Привязка может быть настроена и подготовлена ​​приложением до инициализации объекта WeaveEchoClient или ее можно оставить неподготовленной, и в этом случае WeaveEchoClient запросит подготовку привязки по требованию (подробности см. в разделе Binding::RequestPrepare()). ).

Подготовка привязки по требованию также будет запрошена в случае сбоя после перехода в состояние готовности.

ОтправитьПовторяющийся режим

Метод SendRepeating() можно использовать для перевода WeaveEchoClient в режим SendRepeating. В этом режиме клиентский объект отправляет повторяющуюся последовательность сообщений EchoRequest партнеру с заданным интервалом. Режим SendRepeating можно отменить, вызвав метод Stop() .

Многоадресная и широковещательная передача

Объект WeaveEchoClient можно использовать для отправки EchoRequests нескольким получателям одновременно, настроив объект Binding с соответствующим адресом многоадресной рассылки IPv6 или широковещательным адресом локальной сети IPv4 (255.255.255.255). Когда объект WeaveEchoClient обнаруживает многоадресный или широковещательный адрес однорангового узла, он автоматически переходит в режим MultiResponse при отправке EchoRequest.

В этом режиме объект продолжает прослушивать и доставлять все входящие сообщения EchoResponse, поступающие на тот же обмен. Объект остается в режиме MultiResponse до тех пор, пока: 1) приложение не вызовет Stop() или Send() , 2) в режиме SendRepeating, не придет время отправить еще один запрос или 3) не будет получен ответ и не истечет время ожидания приема.

API-события

В ходе своей работы объект WeaveEchoClient будет обращаться к приложению для запроса определенных действий или доставки уведомлений о важных событиях. Эти вызовы событий API выполняются для текущей настроенной функции обратного вызова на клиентском объекте. Если не указано иное, приложения могут изменять состояние клиента во время обратного вызова события. Единственным общим исключением является метод объекта Shutdown() , который никогда не может быть вызван во время обратного вызова.

Определены следующие события API:

Подготовить полезную нагрузку

WeaveEchoClient собирается сформировать сообщение EchoRequest и запрашивает у приложения предоставление полезных данных. Если приложение пожелает, оно может вернуть новый PacketBuffer, содержащий полезные данные. Если приложение не обрабатывает это событие, автоматически будет отправлен EchoRequest с полезной нагрузкой нулевой длины. Приложение НЕ МОЖЕТ изменить состояние WeaveEchoClient во время этого обратного вызова.

Запрос отправлен

Одноранговому узлу было отправлено сообщение EchoRequest.

Ответ получен

От узла было получено сообщение EchoResponse. Аргументы события содержат полезные данные ответа и метаинформацию об ответном сообщении.

Ошибка связи

Произошла ошибка при формировании или отправке EchoRequest или во время ожидания ответа. Примерами ошибок, которые могут возникнуть во время ожидания ответа, являются ключевые ошибки или неожиданное закрытие соединения. Аргументы события содержат причину ошибки.

Таймаут ответа

EchoResponse не был получен в отведенное время. Тайм-аут ответа контролируется свойством DefaultResponseTimeout объекта Binding .

Запрос прерван

Текущий обмен Echo был прерван, поскольку был сделан запрос на отправку еще одного EchoRequest до того, как был получен ответ на предыдущее сообщение. Это может произойти в режиме SendRepeating, когда придет время отправить следующий EchoRequest. Это также может произойти, если приложение вызывает Send() после отправки EchoRequest, но до получения какого-либо ответа.

Когда объект находится в режиме MultiResponse, событие подавляется, если получено хотя бы одно сообщение EchoResponse.

Конструкторы и деструкторы

WeaveEchoClient (void)

Публичные типы

EventCallback )(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam) определение типа
void(*
EventType {
kEvent_PreparePayload = 1,
kEvent_RequestSent = 2,
kEvent_ResponseReceived = 3,
kEvent_CommunicationError = 4,
kEvent_ResponseTimeout = 5,
kEvent_RequestAborted = 6,
kEvent_DefaultCheck = 100
}
перечисление
State {
kState_NotInitialized = 0,
kState_Idle = 1,
kState_PreparingBinding = 2,
kState_RequestInProgress = 3,
kState_WaitingToSend = 4
}
перечисление

Публичные атрибуты

AppState
void *
Указатель на данные, специфичные для приложения.

Общественные функции

GetBinding (void) const
Возвращает указатель на объект Binding , связанный с WeaveEchoClient .
GetEventCallback (void) const
EventCallback
Возвращает указатель на функцию обратного вызова событий API, настроенную в данный момент для объекта WeaveEchoClient .
GetState (void) const
Получите текущее состояние объекта WeaveEchoClient .
Init ( Binding *binding, EventCallback eventCallback, void *appState)
Инициализируйте объект WeaveEchoClient .
IsSendRrepeating () const
bool
Возвращает true, если объект WeaveEchoClient в данный момент находится в режиме повторения отправки.
RequestInProgress () const
bool
Возвращает значение true, если запрос EchoRequest был отправлен и объект WeaveEchoClient ожидает ответа.
Send (void)
Отправьте сообщение EchoRequest партнеру.
Send (PacketBuffer *payloadBuf)
Отправьте сообщение EchoRequest партнеру с определенной полезной нагрузкой.
SendRepeating (uint32_t sendIntervalMS)
Инициировать отправку повторяющейся последовательности сообщений EchoRequest партнеру.
SetEventCallback (EventCallback eventCallback)
void
Устанавливает функцию обратного вызова события API для объекта WeaveEchoClient .
Shutdown (void)
void
Завершите работу ранее инициализированного объекта WeaveEchoClient .
Stop (void)
void
Останавливает любой текущий обмен эхо-сигналами и отменяет режим повторения отправки.

Публичные статические функции

DefaultEventHandler (void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
Обработчик по умолчанию для событий API WeaveEchoClient .

Структуры

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

Входные параметры для события API WeaveEchoClient .

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

Выходные параметры для события API WeaveEchoClient .

Публичные типы

Обратный вызов события

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

Тип события

 EventType
Характеристики
kEvent_CommunicationError

Произошла ошибка связи при отправке EchoRequest или ожидании ответа.

kEvent_DefaultCheck

Используется для проверки правильности обработки событий по умолчанию в приложении.

kEvent_PreparePayload

Приложению предлагается подготовить полезную нагрузку для запроса Echo.

kEvent_RequestAborted

Текущий обмен Echo был прерван, поскольку был сделан запрос на запуск другого обмена.

kEvent_RequestSent

Одноранговому узлу было отправлено сообщение EchoRequest.

kEvent_ResponseReceived

От узла было получено сообщение EchoResponse.

kEvent_ResponseTimeout

EchoResponse не был получен в отведенное время.

Состояние

 State
Характеристики
kState_Idle

Клиентский объект простаивает.

kState_NotInitialized

Клиентский объект не инициализирован.

kState_PreparingBinding

Клиентский объект ожидает готовности привязки.

kState_RequestInProgress

Сообщение EchoRequest отправлено, и клиентский объект ожидает ответа.

kState_WaitingToSend

SendRepeating() был вызван, и клиентский объект ожидает следующей отправки EchoRequest.

Публичные атрибуты

состояние приложения

void * AppState

Указатель на данные, специфичные для приложения.

Общественные функции

Получить привязку

Binding * GetBinding(
  void
) const 

Возвращает указатель на объект Binding , связанный с WeaveEchoClient .

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

Возвращает указатель на функцию обратного вызова событий API, настроенную в данный момент для объекта WeaveEchoClient .

GetState

State GetState(
  void
) const 

Получите текущее состояние объекта WeaveEchoClient .

В этом

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

Инициализируйте объект WeaveEchoClient .

Инициализируйте объект WeaveEchoClient для подготовки к отправке эхо-сообщений одноранговому узлу.

Подробности
Параметры
[in] binding
Объект привязки , который будет использоваться для установления связи с одноранговым узлом.
[in] eventCallback
Указатель на функцию, которая будет вызываться объектом WeaveEchoClient для доставки событий API в приложение.
[in] appState
Указатель на объект, определенный приложением, который будет передаваться обратно приложению при возникновении события API.

IsSendRrepeating

bool IsSendRrepeating() const 

Возвращает true, если объект WeaveEchoClient в данный момент находится в режиме повторения отправки.

ЗапросВ процессе

bool RequestInProgress() const 

Возвращает значение true, если запрос EchoRequest был отправлен и объект WeaveEchoClient ожидает ответа.

Отправлять

WEAVE_ERROR Send(
  void
)

Отправьте сообщение EchoRequest партнеру.

Этот метод инициирует процесс отправки сообщения EchoRequest на одноранговый узел. Если и когда будет получено соответствующее сообщение EchoResponse, оно будет доставлено в приложение через событие API ResponseReceived.

При формировании сообщения EchoRequest WeaveEchoClient отправляет запрос приложению через событие API ПодготовкаPayload для подготовки полезных данных сообщения.

Если объект Binding не находится в состоянии Ready при вызове этого метода, к методу Binding::RequestPrepare() будет отправлен запрос на инициацию подготовки по требованию. Операция отправки будет поставлена ​​в очередь до завершения этого процесса. Максимальная глубина этой очереди равна единице. Таким образом, любой вызов Send() , пока в очереди есть предыдущая отправка, приведет к отправке только одного EchoRequest.

Вызов Send() , когда WeaveEchoClient находится в режиме повторения отправки (т.е. из-за предыдущего вызова SendRepeating() ), приводит к ускорению и сбросу цикла отправки, но не выводит WeaveEchoClient из режима повторения отправки.

Отправлять

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

Отправьте сообщение EchoRequest партнеру с определенной полезной нагрузкой.

Этот метод инициирует процесс отправки сообщения EchoRequest на одноранговый узел. Содержимое предоставленного буфера полезной нагрузки будет отправлено партнеру в качестве полезной нагрузки сообщения EchoRequest. Если и когда будет получено соответствующее сообщение EchoResponse, оно будет доставлено в приложение через событие API ResponseReceived.

При вызове этого метода право собственности на предоставленный буфер полезной нагрузки переходит к объекту WeaveEchoClient , который несет ответственность за его освобождение. Это верно независимо от того, завершился ли метод успешно или с ошибкой.

Если объект Binding не находится в состоянии Ready при вызове этого метода, к методу Binding::RequestPrepare() будет отправлен запрос на инициацию подготовки по требованию. Операция отправки будет поставлена ​​в очередь до завершения этого процесса. Максимальная глубина этой очереди равна единице. Таким образом, любой вызов Send() , пока в очереди есть предыдущая отправка, приведет к отправке только одного EchoRequest.

Вызов Send() , когда WeaveEchoClient находится в режиме повторения отправки (т.е. из-за предыдущего вызова SendRepeating() ), приводит к ускорению и сбросу цикла отправки, но не выводит WeaveEchoClient из режима повторения отправки.

Подробности
Параметры
[in] payloadBuf
Объект PacketBuffer, содержащий полезные данные для отправки партнеру. Право собственности на этот буфер во всех случаях переходит к объекту WeaveEchoClient .

ОтправитьПовторение

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

Инициировать отправку повторяющейся последовательности сообщений EchoRequest партнеру.

Этот метод инициирует повторяющийся процесс отправки сообщений EchoRequest одноранговому узлу. Когда сообщения EchoResponse получены от узла, они доставляются в приложение через событие API ResponseReceived.

При вызове SendRepeating() WeaveEchoClient переходит в режим повторения отправки, в котором он остается до тех пор, пока не будет вызван Stop() или не произойдет ошибка привязки . Вызов SendRepeating() несколько раз приводит к сбросу цикла отправки и обновлению интервала.

Первоначальная отправка последовательности происходит во время вызова SendRepeating() или всякий раз, когда привязка становится готовой после вызова SendRepeating() (см. ниже). Последующие отправки происходят после этого через указанный интервал.

Каждый раз, когда происходит отправка, WeaveEchoClient отправляет запрос приложению через событие API ПодготовкаPayload для подготовки полезных данных сообщения.

Если объект Binding не находится в состоянии «Готово», когда придет время отправлять сообщение, к методу Binding::RequestPrepare() будет отправлен запрос на инициацию подготовки по требованию. Дальнейшие повторные отправки сообщений будут приостановлены до завершения этого процесса. Сбой во время подготовки привязки по требованию приведет к тому, что WeaveEchoClient выйдет из режима повторения отправки.

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

Устанавливает функцию обратного вызова события API для объекта WeaveEchoClient .

Неисправность

void Shutdown(
  void
)

Завершите работу ранее инициализированного объекта WeaveEchoClient .

Обратите внимание, что этот метод можно вызвать только в том случае, если ранее был вызван метод Init() .

Останавливаться

void Stop(
  void
)

Останавливает любой текущий обмен эхо-сигналами и отменяет режим повторения отправки.

WeaveEchoClient

 WeaveEchoClient(
  void
)

Публичные статические функции

Обработчик событий по умолчанию

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

Обработчик по умолчанию для событий API WeaveEchoClient .

Приложения должны вызывать этот метод для любых событий API, которые они не распознают или не обрабатывают. Предоставляемые параметры должны быть такими же, как те, которые клиентский объект передает функции обработчика событий приложения.

Подробности
Параметры
[in] appState
Указатель на определяемую приложением информацию о состоянии, связанную с клиентским объектом.
[in] eventType
Идентификатор события, передаваемый обратным вызовом события
[in] inParam
Ссылка на параметры входного события, передаваемые обратным вызовом события
[in] outParam
Ссылка на параметры выходного события, передаваемые обратным вызовом события