нл:: Переплетение:: Профили:: 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 .
Запрос прерван
Текущий обмен эхо-сигналами был прерван, поскольку был сделан запрос на отправку еще одного эхо-запроса до того, как был получен ответ на предыдущее сообщение. Это может произойти в режиме SendRepeating, когда придет время отправить следующий EchoRequest. Это также может произойти, если приложение вызывает Send() после отправки EchoRequest, но до получения ответа.
Когда объект находится в режиме MultiResponse, событие подавляется, если получено хотя бы одно сообщение EchoResponse.
Конструкторы и деструкторы | |
---|---|
WeaveEchoClient (void) |
Публичные типы | |
---|---|
EventCallback )(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam) | определение типаvoid(* |
EventType { | перечисление |
State { | перечисление |
Публичные атрибуты | |
---|---|
AppState | void * Указатель на данные, специфичные для приложения. |
Общественные функции | |
---|---|
GetBinding (void) const | Binding * Возвращает указатель на объект 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
Состояние
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 .
Инициализировать
WEAVE_ERROR Init( Binding *binding, EventCallback eventCallback, void *appState )
Инициализируйте объект WeaveEchoClient .
Инициализируйте объект WeaveEchoClient для подготовки к отправке эхо-сообщений одноранговому узлу.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
|
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 из режима повторения отправки.
Подробности | |||
---|---|---|---|
Параметры |
|
ОтправитьПовторение
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, которые они не распознают или не обрабатывают. Предоставляемые параметры должны быть такими же, как те, которые клиентский объект передает функции обработчика событий приложения.
Подробности | |||||||||
---|---|---|---|---|---|---|---|---|---|
Параметры |
|