nl::Weave::Profiles::DataManagement_Current::SubscriptionClient

Zusammenfassung

Öffentliche Typen

@130 enum
EventCallback)(void *const aAppState, EventID aEvent, const InEventParam &aInParam, OutEventParam &aOutParam) typedef
void(*
Callback zum Übergeben von Aboereignissen an die Anwendung.
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
}
enum
ResubscribePolicyCallback)(void *const aAppState, ResubscribeParam &aInParam, uint32_t &aOutIntervalMsec) typedef
void(*
Callback zum Abrufen des Wartezeitintervalls vor dem nächsten erneuten Abonnieren.

Öffentliche statische Funktionen

DefaultEventHandler(EventID aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
void
DefaultResubscribePolicyCallback(void *const aAppState, ResubscribeParam & aInParam, uint32_t & aOutIntervalMsec)
void
Bei der Standardimplementierung der Richtlinie wird ein zufälliger Zeitraum mit einer Auflösung in Millisekunden über ein immer größer werdendes Fenster ausgewählt, nach einer Fibonacci-Folge bis zu WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX.

Öffentliche Funktionen

AbortSubscription(void)
void
Abo abbrechen
ClearUpdated(TraitUpdatableDataSink *aDataSink, PropertyPathHandle aPropertyHandle)
DisableResubscribe(void)
void
Deaktivieren Sie den Mechanismus zum erneuten Abonnieren.
DiscardUpdates()
void
Weist den SubscriptionClient an, die Gruppe von TraitPaths, deren Aktualisierung aussteht, zu leeren und die laufende Aktualisierungsanfrage abzubrechen, falls vorhanden.
EnableResubscribe(ResubscribePolicyCallback aCallback)
void
Aktivieren Sie automatische erneute Abos.
EndSubscription(void)
Kündigen Sie das Abo.
FlushUpdate()
Signalisiert, dass die Anwendung das Mutieren aller TraitUpdatableDataSinks abgeschlossen hat.
FlushUpdate(bool aForce)
Free(void)
void
Geben Sie das Objekt SubscriptionClient kostenlos.
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
Konfiguriere SubscriptionClient als Initiator (im Gegensatz zu einem Gegenabonnenten) und rufe das Abo auf, falls dies nicht der Fall ist.
IsCanceling() const
bool
IsEstablished()
bool
IsEstablishedIdle()
bool
IsFree()
bool
IsInProgressOrEstablished()
bool
IsInResubscribeHoldoff()
bool
IsRetryEnabled()
bool
IsTerminated()
bool
IsUpdatePendingOrInProgress()
bool
LockUpdateMutex(void)
void
OnCatalogChanged()
void
Diese Methode sollte aufgerufen werden, wenn der TraitDataSink-Katalog geändert wurde.
ResetResubscribe(void)
void
Den Mechanismus zum erneuten Abonnieren deaktivieren
SetLivenessTimeoutMsec(uint32_t val)
void
SetUpdated(TraitUpdatableDataSink *aDataSink, PropertyPathHandle aPropertyHandle, bool aIsConditional)
SuspendUpdateRetries()
void
Weist SubscriptionClient an, die Wiederholung von Updateanfragen zu stoppen.
UnlockUpdateMutex(void)
void

Strukturen

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

Gewerkschaften

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

Öffentliche Typen

@130

 @130

EventCallback

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

Callback zum Übergeben von Aboereignissen an die Anwendung.

Details
Parameter
[in] aAppState
App-Statuszeiger, der während der Initialisierung von SubscriptionClient festgelegt wurde.
[in] aEvent
Zeigt an, um welches Ereignis es sich handelt
[in] aInParam
Struktur mit zusätzlichen Details zum Ereignis
[out] aOutParam
Von der Anwendung zurückgegebene Informationen

EventID

 EventID
Attribute
kEvent_OnEventStreamReceived

Wird generiert, wenn SubscriptionEngine einen Ereignisstream in der NotificationRequest-Nachricht initiiert.

Die Anwendung ruft an diesem Punkt möglicherweise EndSubscription(), AbortSubscription() oder Free() auf.

kEvent_OnExchangeStart

Wird generiert, nachdem die Bindung vorbereitet und ExchangeContext eingerichtet wurde, aber bevor Nachrichten gesendet werden.

Das ist die letzte Möglichkeit für eine Anwendung, die ExchangeContext-Einstellungen anzupassen. mEC ist gültig und kann für Zeitüberschreitungseinstellungen optimiert werden. Die Anwendung darf nicht mit anderen Feldern im Client in Berührung kommen und darf ExchangeContext nicht schließen.

kEvent_OnNoMorePendingUpdates

Ein Ereignis, das angibt, dass alle Pfade im Aktualisierungssatz vom Peer verarbeitet wurden und keine weiteren Pfade aktualisiert werden müssen.

kEvent_OnNotificationProcessed

Wird generiert, wenn SubscriptionEngine die Verarbeitung einer NotificationRequest-Nachricht beendet.

Die Anwendung ruft an diesem Punkt möglicherweise EndSubscription(), AbortSubscription() oder Free() auf.

kEvent_OnNotificationRequest

Wird beim Empfang einer NotificationRequest generiert.

Die Anwendung ruft an diesem Punkt möglicherweise EndSubscription(), AbortSubscription() oder Free() auf.

kEvent_OnSubscribeRequestPrepareNeeded

Wird gesendet, wenn die Suchmaschine zum Senden der SubscribeRequest bereit ist.

Die Anwendung muss die Pfade ausfüllen, die sie abonnieren möchte.

kEvent_OnSubscriptionActivity

Ein Ereignis, das eine Aboaktivität angibt.

Sie wird immer dann generiert, wenn der Client einen Hinweis auf die Aboaktivität erhält. Dazu gehören der erfolgreiche Abschluss eines Abos, der Empfang einer NotificationRequest oder der Erhalt eines Statusberichts als Antwort auf die SubscribeConfirm-Nachricht.

kEvent_OnSubscriptionEstablished

Wird bei erfolgreicher Einrichtung des Abos generiert.

Die Anwendung ruft an diesem Punkt möglicherweise EndSubscription(), AbortSubscription() oder Free() auf.

kEvent_OnSubscriptionTerminated

Kennzeichnet das Ende dieses Abos.

Die an nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::EventCallback gesendeten Parameter geben an, ob automatisch ein erneutes Abonnieren versucht wird.

Während des Event-Handler-Aufrufs lautet der Status des Clients Terminated. Wenn kein Wiederholungsversuch unternommen wird, wechselt der Status des Clients zu Initialized, sobald der Event-Handler zurückkehrt. Andernfalls geht der Status in ResubscribeHoldoff über und es wird versucht, das Abo nach der Holdoff-Zeit wiederherzustellen.

Die App ruft in diesem Fall möglicherweise AbortSubscription() oder Free() auf.

Die gesendeten Parameter enthalten auch einen Fehlercode, der den Grund für die Kündigung des Abos angibt.

Das Abo kann aus verschiedenen Gründen gekündigt worden sein, z. B. aufgrund fehlender WRM-Bestätigung, ExchangeContext-Zuweisungsfehler oder Zeitüberschreitung bei der Antwort. Mögliche Fehlercodes, die vom Client generiert werden:

Fehlercode Bedeutung
WEAVE_ERROR_INVALID_MESSAGE_TYPE Eine unbekannte Nachricht wurde empfangen.
WEAVE_ERROR_TIMEOUT Es wurde keine Bestätigung empfangen oder die Aktivitätsprüfung schlägt fehl.
WEAVE_ERROR_INCORRECT_STATE Nachrichten werden in einem unerwarteten Zustand empfangen.
WEAVE_ERROR_STATUS_REPORT_RECEIVED Ein Statusbericht wird empfangen.
WEAVE_ERROR_INVALID_ARGUMENT Die Felder der Aboanfrage sind ungültig.

kEvent_OnUpdateComplete

Ein Ereignis, das den Abschluss der Aktualisierung angibt.

Ereignisparameter geben an, ob die Aktualisierung eines bestimmten Trait-Pfads erfolgreich war oder fehlgeschlagen ist.

ResubscribePolicyCallback

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

Callback zum Abrufen des Wartezeitintervalls vor dem nächsten erneuten Abonnieren.

Anwendungen können in dieser Funktion abgebrochen/freigegeben werden, wenn sie beschlossen haben, kein erneutes Abonnement abzuschließen.

Details
Parameter
[in] aAppState
App-Statuszeiger, der während der Initialisierung von SubscriptionClient festgelegt wurde.
[in] aInParam
Struktur mit zusätzlichen Details zur Wiederholung
[out] aOutIntervalMsec
Wartezeit in Millisekunden bis zum nächsten Versuch

Öffentliche statische Funktionen

DefaultEventHandler

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

DefaultResubscribePolicyCallback

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

Bei der Standardimplementierung der Richtlinie wird ein zufälliger Zeitraum mit einer Auflösung in Millisekunden über ein immer größer werdendes Fenster ausgewählt, nach einer Fibonacci-Folge bis zu WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX.

Nach dem WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX beträgt der Durchschnitt der randomisierten Wartezeit etwa eine Stunde. Wenn die Anzahl der Wiederholungen auf 0 zurückgesetzt wird, beginnt die Sequenz von vorn.

Öffentliche Funktionen

AbortSubscription

void AbortSubscription(
  void
)

Abo abbrechen

Ein Kundenabo abbrechen.

Sofort den gesamten mit dem Abo verknüpften Traffic nicht mehr akzeptieren und alle zugrunde liegenden Kommunikationsressourcen freigeben. Das Objekt SubscriptionClient selbst ist weiterhin gültig und kann wieder verwendet werden.

Beendet das Ende eines Abos durch den Client, ohne den Abo-Publisher zu benachrichtigen und ein OnSubscriptionTerminated-Ereignis an den Event-Handler der Anwendung zu senden. Wenn ein gegenseitiges Abo besteht, wird auch das Gegenabo gekündigt.

Beim Aufrufen von AbortSubscription() wechselt das Objekt SubscriptionClient in den Status Terminated. Nach Abschluss des Beendigungsvorgangs wechselt das Objekt in den Status Initialized. Beide Übergänge erfolgen synchron innerhalb des Aufrufs von AbortSubscription().

Nachdem AbortSubscription() zurückgegeben wurde, kann das Objekt SubscriptionClient verwendet werden, um ein weiteres Abo zu initiieren, oder es kann durch Aufrufen der Methode Free() freigegeben werden.

ClearUpdated

WEAVE_ERROR ClearUpdated(
  TraitUpdatableDataSink *aDataSink,
  PropertyPathHandle aPropertyHandle
)

DisableResubscribe

void DisableResubscribe(
  void
)

Deaktivieren Sie den Mechanismus zum erneuten Abonnieren.

Sollte eine erneute Anmeldung ausstehend sein, wird der Vorgang abgebrochen.

DiscardUpdates

void DiscardUpdates()

Weist den SubscriptionClient an, die Gruppe von TraitPaths, deren Aktualisierung aussteht, zu leeren und die laufende Aktualisierungsanfrage abzubrechen, falls vorhanden.

Diese Methode kann von jedem Rückruf aus aufgerufen werden.

EnableResubscribe

void EnableResubscribe(
  ResubscribePolicyCallback aCallback
)

Aktivieren Sie automatische erneute Abos.

Hängen Sie einen Callback an, um die nächste Wiederholungszeit bei einem Fehler anzugeben.

Details
Parameter
[in] aCallback
Optionaler Rückruf zum Abrufen der Wartezeit vor einem erneuten Versuch nach einem Fehler. Wenn NULL ist, wird eine Standardrichtlinie verwendet.

EndSubscription

WEAVE_ERROR EndSubscription(
  void
)

Kündigen Sie das Abo.

Sie kündigen ein Kundenabo ordnungsgemäß.

Wenn die Kompilierungszeitoption WDM_ENABLE_SUBSCRIPTION_CANCEL aktiviert ist, wird das Abo ordnungsgemäß beendet, indem eine Abbruchanfrage an den Peer gesendet wird. Die mit dem Abo verknüpften Ressourcen werden bei einer Antwort des Peers oder bei einer Zeitüberschreitung freigegeben. Wenn die Option deaktiviert ist, entspricht der Aufruf AbortSubscription().

Schließt das Abo des Kunden ordnungsgemäß. Wenn die Unterstützung für die Abokündigung aktiviert ist, wird eine „SubscribeCancelRequest“-Nachricht an den Abo-Publisher gesendet und das System wartet auf eine Antwort, bevor das Abo gekündigt wird. Andernfalls wird das Abo sofort, ähnlich wie bei AbortSubscription(), beendet. Wenn ein gegenseitiges Abo besteht, wird auch das Gegenabo beendet.

Während SubscriptionClient auf eine Antwort auf eine „SubscribeCancelRequest“ wartet, wechselt sie in den Status Canceling.

Sobald der Beendigungsprozess beginnt, wechselt das Objekt SubscriptionClient in den Status Terminated und ein OnSubscriptionTerminated-Ereignis wird an den Event-Handler der Anwendung übergeben. Hinweis: Wenn das Kündigen nicht aktiviert ist, kann der Event-Handler innerhalb des Aufrufs von EndSubscription() synchron aufgerufen werden.

Nachdem der Event-Handler der Anwendung zurückgegeben hat, wechselt das SubscriptionClient-Objekt in den Initialized-Status. An dieser Stelle kann das SubscriptionClient-Objekt verwendet werden, um ein weiteres Abo zu initiieren, oder es kann durch Aufrufen der Free()-Methode freigegeben werden.

FlushUpdate

WEAVE_ERROR FlushUpdate()

Signalisiert, dass die Anwendung das Mutieren aller TraitUpdatableDataSinks abgeschlossen hat.

Sofern kein vorheriger Updateaustausch läuft, nimmt der Client alle als aktualisiert markierten Daten in einer einzigen Aktualisierungsanfrage an die antwortende Person weiter. Diese Methode kann von jedem Thread aus aufgerufen werden.

Details
Parameter
[in] aForce
Bei „true“ wird das Update sofort gesendet, auch wenn für die Zukunft ein Wiederholungsversuch geplant wurde. Dieser Parameter wird standardmäßig als „false“ betrachtet.
Rückgabe
WEAVE_NO_ERROR im Erfolgsfall; andere WEAVE_ERROR-Codes, falls Fehler auftreten.

FlushUpdate

WEAVE_ERROR FlushUpdate(
  bool aForce
)

Kostenlos

void Free(
  void
)

Geben Sie das Objekt SubscriptionClient kostenlos.

Geben Sie ein SubscriptionClient-Objekt kostenlos.

Ruft bei Bedarf AbortSubscription() auf und gibt den Verweis für dieses SubscriptionClient-Objekt frei. Bei richtiger Verwendung sollte dies ermöglichen, dass das Objekt an den Objektpool zurückgegeben werden kann.

Gibt das SubscriptionClient-Objekt frei. Wenn ein Abo aktiv oder in Bearbeitung ist, wird es auf ähnliche Weise sofort beendet wie AbortSubscription(). Laufende Aktualisierungsanfragen werden ebenfalls abgebrochen.

Die Anwendung muss Free() genau einmal während der Lebensdauer eines SubscriptionClient-Objekts aufrufen. Nach dem Aufruf von Free() sollten keine weiteren Verweise auf das Objekt erfolgen.

GetBinding

Binding * GetBinding(
  void
) const 

GetLivenessTimeoutMsec

uint32_t GetLivenessTimeoutMsec(
  void
) const 

GetPeerNodeId

uint64_t GetPeerNodeId(
  void
) const 

GetSubscriptionId

WEAVE_ERROR GetSubscriptionId(
  uint64_t *const apSubscriptionId
)

IndicateActivity

void IndicateActivity(
  void
)

InitiateCounterSubscription

void InitiateCounterSubscription(
  const uint32_t aLivenessTimeoutSec
)

InitiateSubscription

void InitiateSubscription(
  void
)

Konfiguriere SubscriptionClient als Initiator (im Gegensatz zu einem Gegenabonnenten) und rufe das Abo auf, falls dies nicht der Fall ist.

IsCanceling

bool IsCanceling() const 

IsEstablished

bool IsEstablished()

IsEstablishedIdle

bool IsEstablishedIdle()

IsFree

bool IsFree()

IsInProgressOrEstablished

bool IsInProgressOrEstablished()

IsInResubscribeHoldoff

bool IsInResubscribeHoldoff()

IsRetryEnabled

bool IsRetryEnabled()

IsTerminated

bool IsTerminated()

IsUpdatePendingOrInProgress

bool IsUpdatePendingOrInProgress()

LockUpdateMutex

void LockUpdateMutex(
  void
)

OnCatalogChanged

void OnCatalogChanged()

Diese Methode sollte aufgerufen werden, wenn der TraitDataSink-Katalog geändert wurde.

ResetResubscribe

void ResetResubscribe(
  void
)

Den Mechanismus zum erneuten Abonnieren deaktivieren

Dadurch wird sofort ein neuer Versuch gestartet

SetLivenessTimeoutMsec

void SetLivenessTimeoutMsec(
  uint32_t val
)

SetUpdated

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

SuspendUpdateRetries

void SuspendUpdateRetries()

Weist SubscriptionClient an, die Wiederholung von Updateanfragen zu stoppen.

Ermöglicht der App, Updates für einen bestimmten Zeitraum auszusetzen, ohne alle Metadaten zu verwerfen. Aktualisierungen und Wiederholungsversuche werden beim Aufruf von FlushUpdate fortgesetzt. Wenn ein Aufruf zum Anhalten von Updates während einer laufenden Aktualisierung aufgerufen wird, wird die Aktualisierung nicht abgebrochen. Falls sie fehlschlägt, wird sie erst wiederholt, wenn FlushUpdate noch einmal aufgerufen wird.

UnlockUpdateMutex

void UnlockUpdateMutex(
  void
)