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

สรุป

ประเภทสาธารณะ

@130 enum
EventCallback)(void *const aAppState, EventID aEvent, const InEventParam &aInParam, OutEventParam &aOutParam) Typedef
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
}
enum
ResubscribePolicyCallback)(void *const aAppState, ResubscribeParam &aInParam, uint32_t &aOutIntervalMsec) Typedef
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 ล้างชุด TraitPath ที่รอการอัปเดต แล้วล้มเลิกคำขออัปเดตที่กำลังดำเนินการ หากมี
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

EventCallback

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

ติดต่อกลับเพื่อส่งต่อเหตุการณ์การสมัครใช้บริการไปยังแอปพลิเคชัน

รายละเอียด
พารามิเตอร์
[in] aAppState
ตัวชี้สถานะแอปที่ตั้งค่าไว้ระหว่างการเริ่มต้น SubscriptionClient
[in] aEvent
ระบุว่ากิจกรรมใดจะจัด
[in] aInParam
โครงสร้างที่มีรายละเอียดเพิ่มเติมเกี่ยวกับกิจกรรม
[out] aOutParam
ข้อมูลที่แอปพลิเคชันส่งกลับ

EventID

 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

ส่งเมื่อเครื่องมือพร้อมส่งคำขอสมัคร

โดยแอปพลิเคชันจะต้องกรอกตามเส้นทางที่ต้องการสมัครใช้บริการ

kEvent_OnSubscriptionActivity

เหตุการณ์ที่ระบุกิจกรรมการสมัครใช้บริการ

รายงานนี้จะสร้างขึ้นเมื่อลูกค้าได้รับตัวบ่งชี้เกี่ยวกับกิจกรรมการสมัครใช้บริการ ซึ่งรวมถึงการสมัครใช้บริการที่ประสบความสำเร็จ การรับ NotificationRequest หรือการได้รับรายงานสถานะตามข้อความที่สมัครยืนยัน

kEvent_OnSubscriptionEstablished

สร้างขึ้นหลังจากการสมัครใช้บริการเสร็จสมบูรณ์

ในตอนนี้ แอปพลิเคชันอาจเรียก EndSubscription(), AbortSubscription() หรือ Free()

kEvent_OnSubscriptionTerminated

ทำเครื่องหมายการสิ้นสุดของการสมัครใช้บริการนี้

พารามิเตอร์ที่ส่งไปยัง nl::Weave::Profiles::DataManagement_Current::SubscriptionClient::EventCallback จะระบุว่าระบบพยายามสมัครใช้บริการอีกครั้งโดยอัตโนมัติหรือไม่

ระหว่างการเรียกตัวแฮนเดิลเหตุการณ์ สถานะของไคลเอ็นต์จะเป็น Terminated หากไม่พยายามลองใหม่ สถานะของไคลเอ็นต์จะเปลี่ยนเป็น Initialized เมื่อตัวแฮนเดิลเหตุการณ์กลับมา มิเช่นนั้น รัฐจะเปลี่ยนเป็น ResubscribeHoldoff และจะดำเนินการสมัครใช้บริการอีกครั้งหลังเวลาถูกระงับ

แอปพลิเคชันอาจเรียก AbortSubscription() หรือ Free() ในสถานะนี้

นอกจากนี้ พารามิเตอร์ที่ส่งจะมีรหัสข้อผิดพลาดที่ระบุเหตุผลในการสิ้นสุดการสมัครใช้บริการด้วย

การสมัครใช้บริการอาจสิ้นสุดลงด้วยสาเหตุหลายประการ (ไม่มี WRM ACK, จัดสรร ExchangeContext ไม่สำเร็จ, หมดเวลาตอบกลับ,...) รหัสข้อผิดพลาดที่เป็นไปได้บางส่วนที่ไคลเอ็นต์สร้างขึ้นมีดังนี้

รหัสข้อผิดพลาด ความหมาย
WEAVE_ERROR_INVALID_MESSAGE_TYPE ได้รับข้อความที่ไม่รู้จัก
WEAVE_ERROR_TIMEOUT ไม่ได้รับสัญญาณหรือการตรวจสอบความพร้อมใช้งานไม่สำเร็จ
WEAVE_ERROR_INCORRECT_STATE ข้อความที่ได้รับในสถานะที่ไม่คาดคิด
WEAVE_ERROR_STATUS_REPORT_RECEIVED ได้รับรายงานสถานะแล้ว
WEAVE_ERROR_INVALID_ARGUMENT ช่องคำขอติดตามไม่ถูกต้อง

kEvent_OnUpdateComplete

เหตุการณ์ที่แสดงถึงความเสร็จสมบูรณ์ของการอัปเดต

พารามิเตอร์เหตุการณ์จะแจ้งให้ทราบว่าการอัปเดตเส้นทางลักษณะเฉพาะหนึ่งๆ สำเร็จหรือล้มเหลว

ResubscribePolicyCallback

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

ติดต่อกลับเพื่อดึงข้อมูลช่วงเวลาที่ต้องรอก่อนการสมัครใช้บริการครั้งถัดไป

แอปพลิเคชันจะได้รับอนุญาตให้ล้มเลิก/ฟรีในฟังก์ชันนี้ หากผู้ใช้ตัดสินใจที่จะยกเลิกการสมัครใช้บริการใหม่

รายละเอียด
พารามิเตอร์
[in] aAppState
ตัวชี้สถานะแอปที่ตั้งค่าไว้ระหว่างการเริ่มต้น SubscriptionClient
[in] aInParam
โครงสร้างที่มีรายละเอียดเพิ่มเติมเกี่ยวกับการลองใหม่
[out] aOutIntervalMsec
เวลาเป็นมิลลิวินาทีที่ต้องรอก่อนการลองอีกครั้งครั้งถัดไป

ฟังก์ชันสาธารณะแบบคงที่

DefaultEventHandler

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 จะอยู่ที่ประมาณ 1 ชั่วโมง เมื่อจำนวนการลองใหม่รีเซ็ตเป็น 0 ลำดับจะเริ่มจากจุดเริ่มต้นอีกครั้ง

ฟังก์ชันสาธารณะ

AbortSubscription

void AbortSubscription(
  void
)

ยกเลิกการสมัครใช้บริการ

ล้มเลิกการสมัครรับข้อมูลของลูกค้า

หยุดรับการเข้าชมทั้งหมดที่เกี่ยวข้องกับการสมัครใช้บริการทันที และปล่อยทรัพยากรการสื่อสารทั้งหมดที่เกี่ยวข้อง ทั้งนี้ ออบเจ็กต์ SubscriptionClient เองจะยังคงใช้งานได้และอาจใช้งานอีกครั้งได้

การสิ้นสุดไคลเอ็นต์ของการสมัครใช้บริการโดยไม่แจ้งให้ผู้เผยแพร่การสมัครใช้บริการทราบและไม่ส่งเหตุการณ์ OnSubscriptionTerminated ไปยังเครื่องจัดการเหตุการณ์ของแอปพลิเคชัน หากมีการสมัครใช้บริการร่วมกัน การสมัครใช้บริการที่โต้แย้งจะสิ้นสุดลงด้วย

เมื่อเรียกใช้ AbortSubscription() แล้ว ออบเจ็กต์ SubscriptionClient จะเข้าสู่สถานะ Terminated เมื่อกระบวนการสิ้นสุดสิ้นสุดลง ออบเจ็กต์จะเข้าสู่สถานะ Initialized การเปลี่ยนทั้ง 2 แบบจะเกิดขึ้นพร้อมกันภายในการเรียก AbortSubscription()

หลังจากที่แสดงผล AbortSubscription() แล้ว ระบบอาจใช้ออบเจ็กต์ SubscriptionClient เพื่อเริ่มการสมัครใช้บริการรายการอื่น หรืออาจเพิ่มพื้นที่ว่างโดยการเรียกใช้เมธอด Free()

ClearUpdated

WEAVE_ERROR ClearUpdated(
  TraitUpdatableDataSink *aDataSink,
  PropertyPathHandle aPropertyHandle
)

DisableResubscribe

void DisableResubscribe(
  void
)

ปิดใช้กลไกการสมัครอีกครั้ง

ซึ่งจะล้มเลิกหากการสมัครใช้บริการอีกครั้งรอดำเนินการอยู่

DiscardUpdates

void DiscardUpdates()

แจ้งให้ SubscriptionClient ล้างชุด TraitPath ที่รอดำเนินการอัปเดต แล้วล้มเลิกคำขออัปเดตที่กำลังดำเนินการ หากมี

คุณสามารถเรียกใช้เมธอดนี้จาก Callback ใดก็ได้

EnableResubscribe

void EnableResubscribe(
  ResubscribePolicyCallback aCallback
)

เปิดใช้งานการสมัครใช้บริการอีกครั้งโดยอัตโนมัติ

แนบ Callback เพื่อระบุเวลาลองอีกครั้งเมื่อล้มเหลว

รายละเอียด
พารามิเตอร์
[in] aCallback
(ไม่บังคับ) ให้ติดต่อกลับเพื่อเรียกข้อมูลระยะเวลาที่ต้องรอก่อนลองอีกครั้งหลังจากที่ดำเนินการไม่สำเร็จ หากค่าว่าง ให้ใช้นโยบายเริ่มต้น

EndSubscription

WEAVE_ERROR EndSubscription(
  void
)

สิ้นสุดการสมัครใช้บริการ

ยุติการสมัครใช้บริการของลูกค้าอย่างค่อยเป็นค่อยไป

เมื่อเปิดใช้ตัวเลือกเวลาคอมไพล์ WDM_ENABLE_SUBSCRIPTION_CANCEL ให้ยุติการสมัครใช้บริการอย่างนุ่มนวลโดยส่ง cancelRequest ไปยังแอปเทียบเท่า ทรัพยากรที่เชื่อมโยงกับการสมัครใช้บริการจะใช้ได้ฟรีเมื่อมีการตอบกลับจากแอปเทียบเท่าหรือเมื่อหมดเวลา เมื่อปิดใช้ตัวเลือก การเรียกใช้จะเท่ากับ AbortSubscription()

ยุติการสมัครใช้บริการเมื่อสิ้นสุดไคลเอ็นต์อย่างค่อยเป็นค่อยไป หากเปิดใช้งานการสนับสนุนการยกเลิกการสมัครรับข้อมูลไว้ ข้อความ SupportCancelRequest จะถูกส่งไปยังผู้เผยแพร่ที่สมัครรับข้อมูล และระบบจะรอการตอบกลับก่อนยุติการสมัครรับข้อมูล ไม่เช่นนั้น การสมัครใช้บริการจะสิ้นสุดลงทันทีในลักษณะเดียวกับ AbortSubscription() หากมีการสมัครใช้บริการร่วมกัน การสมัครใช้บริการที่โต้แย้งจะสิ้นสุดลงด้วย

ขณะรอการตอบกลับสำหรับ SubscriptionCancelRequest แต่ SubscriptionClient จะเข้าสู่สถานะ Canceling

เมื่อกระบวนการสิ้นสุดเริ่มขึ้น ออบเจ็กต์ SubscriptionClient จะเข้าสู่สถานะ Terminated และนำส่งเหตุการณ์ OnSubscriptionTerminated ไปยังเครื่องจัดการเหตุการณ์ของแอปพลิเคชัน โปรดทราบว่าหากไม่ได้เปิดใช้การยกเลิกการสนับสนุน ระบบอาจเรียกใช้เครื่องจัดการเหตุการณ์พร้อมกันภายในการเรียก EndSubscription()

หลังจากที่ตัวแฮนเดิลเหตุการณ์ของแอปพลิเคชันกลับมา ออบเจ็กต์ SubscriptionClient จะเข้าสู่สถานะ Initialized ในจุดนี้ ระบบอาจใช้ออบเจ็กต์ SubscriptionClient เพื่อเริ่มการสมัครใช้บริการรายการอื่น หรืออาจเพิ่มพื้นที่ว่างโดยการเรียกใช้เมธอด Free()

FlushUpdate

WEAVE_ERROR FlushUpdate()

สัญญาณที่แจ้งว่าแอปพลิเคชันเปลี่ยนแปลง TraitUpdatableDataSinks ทั้งหมดเรียบร้อยแล้ว

ไคลเอ็นต์จะนำข้อมูลทั้งหมดที่ทำเครื่องหมายว่าอัปเดตแล้วส่งไปให้ผู้ตอบในคำขออัปเดตรายการเดียว เว้นแต่การแลกเปลี่ยนการอัปเดตครั้งก่อนหน้าอยู่ระหว่างดำเนินการ ระบบจะเรียกใช้เมธอดนี้จากชุดข้อความใดก็ได้

รายละเอียด
พารามิเตอร์
[in] aForce
หากเป็น "จริง" จะทำให้ส่งการอัปเดตทันที แม้ว่าจะมีการกำหนดเวลาลองอีกครั้งในอนาคตก็ตาม พารามิเตอร์นี้จะถือว่าเป็น "เท็จ" โดยค่าเริ่มต้น
การคืนสินค้า
WEAVE_NO_ERROR ในกรณีที่สำเร็จ รหัส WEAVE_ERROR อื่นๆ ในกรณีที่เกิดข้อผิดพลาด

FlushUpdate

WEAVE_ERROR FlushUpdate(
  bool aForce
)

ฟรี

void Free(
  void
)

ทำให้ออบเจ็กต์ SubscriptionClient นี้ว่าง

ทำให้ออบเจ็กต์ SubscriptionClient ว่าง

เรียกใช้ AbortSubscription() หากจำเป็น และปล่อยการอ้างอิงในออบเจ็กต์ SubscriptionClient นี้ หากใช้งานอย่างถูกต้อง ออบเจ็กต์นี้ควรทำให้ระบบส่งคืนออบเจ็กต์ไปยัง Object Pool

ทำให้ออบเจ็กต์ SubscriptionClient ว่าง หากการสมัครใช้บริการมีการใช้งานอยู่หรืออยู่ระหว่างดำเนินการ การสมัครใช้บริการจะสิ้นสุดลงทันทีในลักษณะเดียวกับการเรียกใช้ AbortSubscription() หากคำขอการอัปเดตใดๆ อยู่ระหว่างดำเนินการ คำขอเหล่านั้นจะถูกล้มเลิก

แอปพลิเคชันมีหน้าที่ในการเรียกใช้ Free() เพียงครั้งเดียวในระหว่างอายุการใช้งานของออบเจ็กต์ SubscriptionClient หลังจากเรียก Free() แล้ว ไม่ควรมีการอ้างอิงไปยังออบเจ็กต์นั้นอีก

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
)

กำหนดค่า SubscriptionClient ในฐานะผู้เริ่ม (ไม่ใช่ผู้ใช้โต้แย้ง) และทำให้การสมัครใช้บริการใช้งานได้หากไม่ใช่

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()

ควรเรียกเมธอดนี้เมื่อมีการแก้ไขแคตตาล็อก TraitDataSink

ResetResubscribe

void ResetResubscribe(
  void
)

ใช้กลไกการสมัครใช้บริการอีกครั้ง

การดำเนินการนี้จะเริ่มต้นการลองอีกครั้งทันที

SetLivenessTimeoutMsec

void SetLivenessTimeoutMsec(
  uint32_t val
)

SetUpdated

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

SuspendUpdateRetries

void SuspendUpdateRetries()

แจ้งให้ SubscriptionClient หยุดลองส่งคำขออัปเดตอีกครั้ง

อนุญาตให้แอปพลิเคชันระงับการอัปเดตเป็นระยะเวลาหนึ่งโดยไม่ทิ้งข้อมูลเมตาทั้งหมด ระบบจะกลับมาอัปเดตและลองใหม่ต่อเมื่อมีการเรียกใช้ FlushUpdate เมื่อเรียกใช้ให้ระงับการอัปเดตขณะที่การอัปเดตอยู่ระหว่างดำเนินการ การอัปเดตจะไม่ถูกยกเลิก แต่หากไม่สำเร็จ จะไม่ลองอีกครั้งจนกว่าจะมีการเรียกใช้ FlushUpdate อีกครั้ง

UnlockUpdateMutex

void UnlockUpdateMutex(
  void
)