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 Zeitintervalls bis zum 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
Die Standard-Richtlinienimplementierung wählt einen zufälligen Zeitraum mit einer Auflösung im Millisekundenbereich über ein stetig zunehmendes Fenster nach einer Fibonacci-Sequenz bis WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX aus.

Ö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 SubscriptionClient an, die Gruppe der TraitPaths zu leeren, die noch nicht aktualisiert werden müssen, und die laufende Aktualisierungsanfrage, falls vorhanden, abzubrechen.
EnableResubscribe(ResubscribePolicyCallback aCallback)
void
Aktivieren Sie die Option zum automatischen erneuten Abonnieren.
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 dieses SubscriptionClient-Objekt 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
Konfigurieren Sie SubscriptionClient als Initiator (und nicht als Gegenabonnenten) und starten Sie das Abo, 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 geändert wurde.
ResetResubscribe(void)
void
Aktivieren Sie den Mechanismus zum erneuten Abonnieren.
SetLivenessTimeoutMsec(uint32_t val)
void
SetUpdated(TraitUpdatableDataSink *aDataSink, PropertyPathHandle aPropertyHandle, bool aIsConditional)
SuspendUpdateRetries()
void
Weist SubscriptionClient an, die Wiederholung von Aktualisierungsanfragen zu beenden.
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
Der App-Statuszeiger wurde während der Initialisierung von SubscriptionClient gesetzt.
[in] aEvent
Gibt an, welches Ereignis stattfindet
[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 erfasst.

Die Anwendung kann an dieser Stelle EndSubscription(), AbortSubscription() oder Free() aufrufen.

kEvent_OnExchangeStart

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

Dies ist die letzte Möglichkeit für eine Anwendung, die ExchangeContext-Einstellungen anzupassen. mEC ist gültig und kann für Zeitlimiteinstellungen optimiert werden. Die Anwendung darf keine anderen Felder im Client berühren und ExchangeContext nicht schließen.

kEvent_OnNoMorePendingUpdates

Ein Ereignis, das angibt, dass alle Pfade im Update-Dataset 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 kann an dieser Stelle EndSubscription(), AbortSubscription() oder Free() aufrufen.

kEvent_OnNotificationRequest

Wird nach dem Empfang einer NotificationRequest generiert.

Die Anwendung kann an dieser Stelle EndSubscription(), AbortSubscription() oder Free() aufrufen.

kEvent_OnSubscribeRequestPrepareNeeded

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

Es wird erwartet, dass die Anwendung die Pfade ausfüllt, die sie abonnieren möchte.

kEvent_OnSubscriptionActivity

Ein Ereignis, das auf Aboaktivitäten hinweist.

Er wird immer dann generiert, wenn der Kunde einen Hinweis zur Aboaktivität erhält. Dazu gehören eine erfolgreiche Abonnementeinrichtung, der Empfang einer NotificationRequest oder der Erhalt eines Statusberichts als Antwort auf die SubscribeConfirm-Nachricht.

kEvent_OnSubscriptionEstablished

Wird nach einer erfolgreichen Einrichtung des Abos generiert.

Die Anwendung kann an dieser Stelle EndSubscription(), AbortSubscription() oder Free() aufrufen.

kEvent_OnSubscriptionTerminated

Kennzeichnet das Ende dieses Abos.

Die an nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::EventCallback gesendeten Parameter geben an, ob automatisch versucht wird, ein Abo abzuschließen.

Während des Event-Handler-Aufrufs hat der Client den Status Terminated. Wenn kein Wiederholungsversuch erfolgt, wechselt der Status des Clients zu Initialized, wenn der Event-Handler zurückkehrt. Andernfalls wird der Status in ResubscribeHoldoff geändert und es wird versucht, das Abo nach der Holdoff-Zeit wiederherzustellen.

Die App kann in diesem Status AbortSubscription() oder Free() aufrufen.

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

Das Abo kann aus verschiedenen Gründen beendet worden sein (WRM-Bestätigung fehlt, ExchangeContext-Zuweisungsfehler, Antwortzeitüberschreitung usw.) Mögliche Fehlercodes, die vom Client generiert werden:

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

kEvent_OnUpdateComplete

Ein Ereignis, das den Abschluss der Aktualisierung anzeigt.

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 Zeitintervalls bis zum nächsten erneuten Abonnieren.

Apps dürfen im Rahmen dieser Funktion abgebrochen bzw. kostenlos angeboten werden, wenn sie auf erneute Abonnements verzichten möchten.

Details
Parameter
[in] aAppState
Der App-Statuszeiger wurde während der Initialisierung von SubscriptionClient gesetzt.
[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
)

Die Standard-Richtlinienimplementierung wählt einen zufälligen Zeitraum mit einer Auflösung im Millisekundenbereich über ein stetig wachsendes Fenster nach einer Fibonacci-Sequenz bis WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX aus.

Die durchschnittliche Wartezeit nach dem WDM_RESUBSCRIBE_MAX_FIBONACCI_STEP_INDEX liegt bei etwa einer Stunde. Wenn die Anzahl der Wiederholungen auf 0 zurückgesetzt wird, beginnt die Sequenz wieder von vorn.

Öffentliche Funktionen

AbortSubscription

void AbortSubscription(
  void
)

Abo abbrechen

Kundenabo abbrechen

Ab sofort keinen Traffic mehr annehmen, der mit dem Abo verknüpft ist, und alle zugrunde liegenden Kommunikationsressourcen freigeben. Das SubscriptionClient-Objekt selbst bleibt gültig und kann erneut verwendet werden.

Beendet das Ende eines Abos durch den Client, ohne den Abo-Publisher zu benachrichtigen und ohne ein OnSubscriptionTerminated-Ereignis an den Event-Handler der Anwendung zu senden. Wenn ein gegenseitiges Abonnement vorhanden ist, wird auch das Zähler-Abonnement beendet.

Nach dem Aufrufen von AbortSubscription() wechselt das Objekt SubscriptionClient in den Status Terminated. Sobald der Beendigungsprozess abgeschlossen ist, wechselt das Objekt in den Status Initialized. Beide Übergänge erfolgen synchron innerhalb des Aufrufs von AbortSubscription().

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

ClearUpdated

WEAVE_ERROR ClearUpdated(
  TraitUpdatableDataSink *aDataSink,
  PropertyPathHandle aPropertyHandle
)

DisableResubscribe

void DisableResubscribe(
  void
)

Deaktivieren Sie den Mechanismus zum erneuten Abonnieren.

Dieser Vorgang wird abgebrochen, wenn ein erneutes Abonnieren aussteht.

DiscardUpdates

void DiscardUpdates()

Weist SubscriptionClient an, die Gruppe der TraitPaths zu leeren, die noch nicht aktualisiert werden müssen, und die laufende Aktualisierungsanfrage, falls vorhanden, abzubrechen.

Diese Methode kann über jeden Callback aufgerufen werden.

EnableResubscribe

void EnableResubscribe(
  ResubscribePolicyCallback aCallback
)

Aktivieren Sie die Option zum automatischen erneuten Abonnieren.

Hängen Sie einen Callback an, um den nächsten Wiederholungszeitpunkt bei einem Fehler anzugeben.

Details
Parameter
[in] aCallback
Optionaler Callback zum Abrufen der Wartezeit bis zum erneuten Versuch nach einem Fehler. Wenn NULL, wird eine Standardrichtlinie verwendet.

EndSubscription

WEAVE_ERROR EndSubscription(
  void
)

Kündigen Sie das Abo.

Clientabo ordnungsgemäß beenden.

Wenn die Option zur Kompilierungszeit WDM_ENABLE_SUBSCRIPTION_CANCEL aktiviert ist, können Sie das Abo ordnungsgemäß beenden, indem Sie eine „CancelRequest“ an den Peer senden. Die mit dem Abo verknüpften Ressourcen werden bei der Antwort des Peers oder bei einer Zeitüberschreitung freigegeben. Wenn die Option deaktiviert ist, entspricht der Aufruf AbortSubscription().

Beenden eines Abos für den Client ordnungsgemäß. Wenn die Unterstützung für die Kündigung von Abos 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 auf ähnliche Weise wie AbortSubscription() sofort gekündigt. Wenn ein gegenseitiges Abonnement vorhanden ist, wird auch das Zähler-Abonnement beendet.

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

Sobald der Beendigungsprozess beginnt, wechselt das SubscriptionClient-Objekt in den Status Terminated und ein OnSubscriptionTerminated-Ereignis wird an den Event-Handler der Anwendung gesendet. Wenn die Unterstützung zum Abbrechen 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 Status Initialized. Jetzt 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 Aktualisierungsaustausch durchgeführt wird, nimmt der Client alle Daten, die als aktualisiert markiert sind, in einer Aktualisierungsanfrage an den Teilnehmer, der sie aktualisiert hat. Diese Methode kann von jedem Thread aus aufgerufen werden.

Details
Parameter
[in] aForce
Falls wahr, wird das Update sofort gesendet, auch wenn ein neuer Versuch in der Zukunft geplant wurde. Dieser Parameter wird standardmäßig als falsch betrachtet.
Rückgabe
WEAVE_NO_ERROR im Falle eines Erfolgs; andere WEAVE_ERROR-Codes verwenden, falls ein Fehler auftritt.

FlushUpdate

WEAVE_ERROR FlushUpdate(
  bool aForce
)

Kostenlos

void Free(
  void
)

Geben Sie dieses SubscriptionClient-Objekt kostenlos.

Geben Sie ein SubscriptionClient-Objekt kostenlos.

Ruft bei Bedarf AbortSubscription() auf und gibt den refcount für dieses SubscriptionClient-Objekt frei. Bei korrekter Verwendung sollte dies dazu führen, 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 sofort gekündigt, ähnlich wie beim Aufrufen von AbortSubscription(). Laufende Aktualisierungsanfragen werden auf ähnliche Weise abgebrochen.

Die Anwendung muss Free() während der Lebensdauer eines SubscriptionClient-Objekts genau einmal 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
)

Konfigurieren Sie SubscriptionClient als Initiator (und nicht als Gegenabonnenten) und starten Sie das Abo, 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 geändert wurde.

ResetResubscribe

void ResetResubscribe(
  void
)

Aktivieren Sie den Mechanismus zum erneuten Abonnieren.

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 Aktualisierungsanfragen zu beenden.

Ermöglicht der App, Updates für einen bestimmten Zeitraum auszusetzen, ohne alle Metadaten zu verwerfen. Updates und Wiederholungsversuche werden fortgesetzt, wenn FlushUpdate aufgerufen wird. Wird aufgerufen, um Updates auszusetzen, während ein Update ausgeführt wird, wird das Update nicht abgebrochen, aber falls es fehlschlägt, wird es erst dann wiederholt, wenn FlushUpdate erneut aufgerufen wird.

UnlockUpdateMutex

void UnlockUpdateMutex(
  void
)