нл:: Переплетение:: Профили:: DataManagement_Current:: ПодпискаКлиент

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

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

@130 перечисление
EventCallback )(void *const aAppState, EventID aEvent, const InEventParam &aInParam, OutEventParam &aOutParam) определение типа
void(*
Обратный вызов для передачи событий подписки в приложение.
EventID {
kEvent_OnSubscriptionTerminated = 1,
kEvent_OnExchangeStart = 2,
kEvent_OnSubscribeRequestPrepareNeeded = 3,
kEvent_OnSubscriptionEstablished = 4,
kEvent_OnNotificationRequest = 5,
kEvent_OnNotificationProcessed = 6,
kEvent_OnEventStreamReceived = 7,
kEvent_OnSubscriptionActivity = 8,
kEvent_OnUpdateComplete = 9,
kEvent_OnNoMorePendingUpdates = 10
}
перечисление
ResubscribePolicyCallback )(void *const aAppState, ResubscribeParam &aInParam, uint32_t &aOutIntervalMsec) определение типа
void(*
Обратный вызов для получения интервала времени ожидания перед следующей повторной подпиской.

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

DefaultEventHandler ( EventID aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
void
DefaultResubscribePolicyCallback (void *const aAppState, ResubscribeParam & aInParam, uint32_t & aOutIntervalMsec)
void
Реализация политики по умолчанию выберет случайный временной интервал с миллисекундным разрешением в постоянно увеличивающемся окне, следуя последовательности Фибоначчи до WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX.

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

AbortSubscription (void)
void
Отменить подписку.
ClearUpdated ( TraitUpdatableDataSink *aDataSink, PropertyPathHandle aPropertyHandle)
DisableResubscribe (void)
void
Отключите механизм повторной подписки.
DiscardUpdates ()
void
Сообщает SubscriptionClient очистить набор TraitPaths, ожидающих обновления, и прервать выполняющийся запрос на обновление, если таковой имеется.
EnableResubscribe ( ResubscribePolicyCallback aCallback)
void
Включите автоматическую повторную подписку.
EndSubscription (void)
Завершить подписку.
FlushUpdate ()
Сигнализирует о том, что приложение завершило изменение всех TraitUpdatableDataSinks.
FlushUpdate (bool aForce)
Free (void)
void
Освободите этот объект SubscriptionClient .
GetBinding (void) const
GetLivenessTimeoutMsec (void) const
uint32_t
GetPeerNodeId (void) const
uint64_t
GetSubscriptionId (uint64_t *const apSubscriptionId)
IndicateActivity (void)
void
InitiateCounterSubscription (const uint32_t aLivenessTimeoutSec)
void
InitiateSubscription (void)
void
Настройте SubscriptionClient в качестве инициатора (в отличие от встречного подписчика) и активируйте подписку, если это не так.
IsCanceling () const
bool
IsEstablished ()
bool
IsEstablishedIdle ()
bool
IsFree ()
bool
IsInProgressOrEstablished ()
bool
IsInResubscribeHoldoff ()
bool
IsRetryEnabled ()
bool
IsTerminated ()
bool
IsUpdatePendingOrInProgress ()
bool
LockUpdateMutex (void)
void
OnCatalogChanged ()
void
Этот метод следует вызывать при изменении каталога TraitDataSink .
ResetResubscribe (void)
void
Уберите механизм переподписки.
SetLivenessTimeoutMsec (uint32_t val)
void
SetUpdated ( TraitUpdatableDataSink *aDataSink, PropertyPathHandle aPropertyHandle, bool aIsConditional)
SuspendUpdateRetries ()
void
Сообщает SubscriptionClient прекратить повторные запросы на обновление.
UnlockUpdateMutex (void)
void

Структуры

nl:: Weave:: Profiles:: DataManagement_Current:: SubscriptionClient:: LastObservedEvent
nl:: Weave:: Profiles:: DataManagement_Current:: SubscriptionClient:: ResubscribeParam

Союзы

nl:: Weave:: Profiles:: DataManagement_Current:: SubscriptionClient:: InEventParam
nl:: Weave:: Profiles:: DataManagement_Current:: SubscriptionClient:: OutEventParam

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

@130

 @130

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

void(* EventCallback)(void *const aAppState, EventID aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)

Обратный вызов для передачи событий подписки в приложение.

Подробности
Параметры
[in] aAppState
Указатель состояния приложения, установленный во время инициализации SubscriptionClient .
[in] aEvent
Указывает, какое событие происходит
[in] aInParam
Структура с дополнительной информацией о событии
[out] aOutParam
Информация, передаваемая приложением

идентификатор события

 EventID
Характеристики
kEvent_OnEventStreamReceived

Создается, когда SubscriptionEngine обнаруживает поток событий в сообщении NotificationRequest.

На этом этапе приложение может вызвать EndSubscription() , AbortSubscription() или Free() .

kEvent_OnExchangeStart

Создается после подготовки привязки и настройки ExchangeContext , но до отправки каких-либо сообщений.

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

kEvent_OnNoMorePendingUpdates

Событие, обозначающее, что все пути в наборе обновлений были обработаны узлом и пути больше не нужно обновлять.

kEvent_OnNotificationProcessed

Создается, когда SubscriptionEngine завершает обработку сообщения NotificationRequest.

На этом этапе приложение может вызвать EndSubscription() , AbortSubscription() или Free() .

kEvent_OnNotificationRequest

Создается при получении NotificationRequest.

На этом этапе приложение может вызвать EndSubscription() , AbortSubscription() или Free() .

kEvent_OnSubscribeRequestPrepareNeeded

Отправляется, когда механизм готов отправить SubscribeRequest.

Ожидается, что приложение заполнит пути, на которые оно хочет подписаться.

kEvent_OnSubscriptionActivity

Событие, указывающее активность подписки.

Он генерируется всякий раз, когда клиент получает информацию об активности подписки; это включает успешное установление подписки, прием NotificationRequest или получение отчета о состоянии в ответ на сообщение SubscribeConfirm.

kEvent_OnSubscriptionEstablished

Генерируется после успешного установления подписки.

На этом этапе приложение может вызвать EndSubscription() , AbortSubscription() или Free() .

kEvent_OnSubscriptionTerminated

Отмечает окончание этой подписки.

Параметры, отправленные в nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::EventCallback, будут указывать, будет ли автоматически предпринята попытка повторной подписки.

Во время вызова обработчика события состояние клиента будет Terminated . Если повторная попытка не будет предпринята, состояние клиента перейдет в Initialized , когда обработчик событий вернется. В противном случае состояние перейдет в ResubscribeHoldoff , и будет предпринята попытка восстановить подписку после времени ожидания.

В этом состоянии приложение может вызвать AbortSubscription() или Free() .

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

Подписка могла быть прекращена по ряду причин (отсутствие подтверждения WRM, ошибка выделения ExchangeContext , время ожидания ответа и т. д.). Некоторые возможные коды ошибок, сгенерированные клиентом:

Код ошибки Значение
WEAVE_ERROR_INVALID_MESSAGE_TYPE Получено неопознанное сообщение.
WEAVE_ERROR_TIMEOUT Подтверждение не получено или проверка работоспособности не удалась.
WEAVE_ERROR_INCORRECT_STATE Сообщения получены в неожиданном состоянии.
WEAVE_ERROR_STATUS_REPORT_RECEIVED Получен отчет о состоянии.
WEAVE_ERROR_INVALID_ARGUMENT Поля запроса на подписку недействительны.

kEvent_OnUpdateComplete

Событие, обозначающее завершение обновления.

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

Повторная подпискаПолитика обратного вызова

void(* ResubscribePolicyCallback)(void *const aAppState, ResubscribeParam &aInParam, uint32_t &aOutIntervalMsec)

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

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

Подробности
Параметры
[in] aAppState
Указатель состояния приложения, установленный во время инициализации SubscriptionClient .
[in] aInParam
Структура с дополнительными сведениями о повторной попытке.
[out] aOutIntervalMsec
Время в миллисекундах ожидания перед следующей повторной попыткой

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

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

void DefaultEventHandler(
  EventID aEvent,
  const InEventParam & aInParam,
  OutEventParam & aOutParam
)

DefaultResubscribePolicyCallback

void DefaultResubscribePolicyCallback(
  void *const aAppState,
  ResubscribeParam & aInParam,
  uint32_t & aOutIntervalMsec
)

Реализация политики по умолчанию выберет случайный временной интервал с миллисекундным разрешением в постоянно увеличивающемся окне, следуя последовательности Фибоначчи до WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX.

Среднее время случайного ожидания после WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX составит около одного часа. Когда счетчик повторов сбрасывается до 0, последовательность снова начинается с начала.

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

Прервать подписку

void AbortSubscription(
  void
)

Отменить подписку.

Отменить подписку клиента.

Немедленно прекратите принимать весь трафик, связанный с подпиской, и освободите все основные коммуникационные ресурсы. Сам объект SubscriptionClient остается действительным и может использоваться снова.

Прекращает подписку на стороне клиента, не уведомляя издателя подписки и не доставляя событие OnSubscriptionTerminated обработчику событий приложения. Если существует взаимная подписка, встречная подписка также прекращается.

При вызове AbortSubscription() объект SubscriptionClient переходит в состояние Terminated . После завершения процесса завершения объект переходит в состояние Initialized . Оба перехода происходят синхронно в рамках вызова AbortSubscription() .

После возврата AbortSubscription() объект SubscriptionClient можно использовать для инициации другой подписки или его можно освободить, вызвав метод Free() .

ОчиститьОбновлено

WEAVE_ERROR ClearUpdated(
  TraitUpdatableDataSink *aDataSink,
  PropertyPathHandle aPropertyHandle
)

ОтключитьПереподписаться

void DisableResubscribe(
  void
)

Отключите механизм повторной подписки.

Это прервется, если ожидается повторная подписка.

Отменить обновления

void DiscardUpdates()

Сообщает SubscriptionClient очистить набор TraitPaths, ожидающих обновления, и прервать выполняющийся запрос на обновление, если таковой имеется.

Этот метод можно вызвать из любого обратного вызова.

Включитьповторную подписку

void EnableResubscribe(
  ResubscribePolicyCallback aCallback
)

Включите автоматическую повторную подписку.

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

Подробности
Параметры
[in] aCallback
Необязательный обратный вызов для получения времени ожидания перед повторной попыткой после сбоя. Если NULL, используйте политику по умолчанию.

Завершить подписку

WEAVE_ERROR EndSubscription(
  void
)

Завершить подписку.

Грамотно завершить клиентскую подписку.

Если опция времени компиляции WDM_ENABLE_SUBSCRIPTION_CANCEL включена, корректно завершите подписку, отправив запрос CancelRequest одноранговому узлу. Ресурсы, связанные с подпиской, освобождаются при ответе от узла или по истечении времени ожидания. Когда опция отключена, вызов эквивалентен AbortSubscription() .

Грамотно завершает клиентскую часть подписки. Если включена поддержка отмены подписки, издателю подписки отправляется сообщение SubscribeCancelRequest, и система ожидает ответа перед прекращением подписки; в противном случае подписка немедленно прекращается аналогично AbortSubscription() . Если существует взаимная подписка, встречная подписка также прекращается.

В ожидании ответа на SubscribeCancelRequest SubscriptionClient переходит в состояние Canceling .

После начала процесса завершения объект SubscriptionClient переходит в состояние Terminated , и событие OnSubscriptionTerminated доставляется обработчику событий приложения. Обратите внимание: если поддержка отмены не включена, обработчик событий может вызываться синхронно внутри вызова EndSubscription() .

После возврата обработчика событий приложения объект SubscriptionClient переходит в состояние Initialized . На этом этапе объект SubscriptionClient можно использовать для инициирования другой подписки или его можно освободить, вызвав метод Free() .

ФлешОбновление

WEAVE_ERROR FlushUpdate()

Сигнализирует о том, что приложение завершило изменение всех TraitUpdatableDataSinks.

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

Подробности
Параметры
[in] aForce
Если задано значение true, обновление будет отправлено немедленно, даже если повторная попытка запланирована на будущее. По умолчанию этот параметр считается ложным.
Возврат
WEAVE_NO_ERROR в случае успеха; другие коды WEAVE_ERROR в случае сбоя.

ФлешОбновление

WEAVE_ERROR FlushUpdate(
  bool aForce
)

Бесплатно

void Free(
  void
)

Освободите этот объект SubscriptionClient .

Освободите объект SubscriptionClient .

При необходимости вызывает AbortSubscription() и освобождает счетчик ссылок для этого объекта SubscriptionClient . При правильном использовании это должно позволить вернуть объект в пул объектов.

Освобождает объект SubscriptionClient . Если подписка активна или находится в стадии выполнения, она немедленно прекращается аналогично вызову AbortSubscription() . Если какие-либо запросы на обновление выполняются, они аналогичным образом отменяются.

Приложение отвечает за вызов Free() ровно один раз за время существования объекта SubscriptionClient . После вызова Free() не следует делать никаких дальнейших ссылок на объект.

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

Binding * GetBinding(
  void
) const 

GetLivenessTimeoutMsec

uint32_t GetLivenessTimeoutMsec(
  void
) const 

GetPeerNodeId

uint64_t GetPeerNodeId(
  void
) const 

GetSubscriptionId

WEAVE_ERROR GetSubscriptionId(
  uint64_t *const apSubscriptionId
)

Индикация активности

void IndicateActivity(
  void
)

ИнициатеСчетчикПодписка

void InitiateCounterSubscription(
  const uint32_t aLivenessTimeoutSec
)

Инициировать подписку

void InitiateSubscription(
  void
)

Настройте SubscriptionClient в качестве инициатора (в отличие от встречного подписчика) и активируйте подписку, если это не так.

Отмена

bool IsCanceling() const 

Установлено

bool IsEstablished()

IsEstablishedIdle

bool IsEstablishedIdle()

Бесплатно

bool IsFree()

ИсИнПрогрессОрестаблишед

bool IsInProgressOrEstablished()

IsInResubscribeHoldoff

bool IsInResubscribeHoldoff()

ИсRetryEnabled

bool IsRetryEnabled()

Истерминировано

bool IsTerminated()

Исупдатеожиданиеилиринпрогресс

bool IsUpdatePendingOrInProgress()

LockUpdateMutex

void LockUpdateMutex(
  void
)

OnCatalogChanged

void OnCatalogChanged()

Этот метод следует вызывать при изменении каталога TraitDataSink .

СброситьПереподписаться

void ResetResubscribe(
  void
)

Уберите механизм переподписки.

Это немедленно инициирует повторную попытку.

SetLivenessTimeoutMsec

void SetLivenessTimeoutMsec(
  uint32_t val
)

УстановитьОбновлено

WEAVE_ERROR SetUpdated(
  TraitUpdatableDataSink *aDataSink,
  PropertyPathHandle aPropertyHandle,
  bool aIsConditional
)

SuspendUpdateRetries

void SuspendUpdateRetries()

Сообщает SubscriptionClient прекратить повторные запросы на обновление.

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

РазблокироватьUpdateMutex

void UnlockUpdateMutex(
  void
)