nl::Weave::Profiles::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 โปรโตคอล Weave Echo สามารถใช้ทดสอบความพร้อมใช้งานและความสามารถในการเข้าถึงของโหนด Weave ได้เช่นเดียวกับโปรโตคอล Ping ของ ICMP

แอปพลิเคชันสามารถใช้คลาส WeaveEchoClient เพื่อส่งข้อความ EchoRequest แบบครั้งเดียวหรือซ้ำไปยังโหนดเพียร์ที่ระบุโดยออบเจ็กต์ Binding มีคลาสที่เกี่ยวข้องสำหรับตอบกลับคำขอเสียงสะท้อน (โปรดดู WeaveEchoServer)

การเชื่อมโยงไคลเอ็นต์

WeaveEchoClient จะใช้ออบเจ็กต์ Binding ของ Weave ซึ่งใช้เพื่อระบุและสื่อสารกับผู้รับที่ต้องการสำหรับคำขอเสียงสะท้อน แอปพลิเคชันสามารถกำหนดค่าและเตรียม Binding ก่อนที่จะเริ่มต้นออบเจ็กต์ WeaveEchoClient หรือปล่อยออบเจ็กต์ไว้โดยไม่เตรียมการก็ได้ ซึ่งในกรณีนี้ WeaveEchoClient จะขอให้เตรียมการเชื่อมโยงตามคำขอ (โปรดดูรายละเอียดใน Binding::RequestPrepare())

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

โหมดส่งซ้ำ

สามารถใช้เมธอด SendRepeating() เพื่อทำให้ WeaveEchoClient อยู่ในโหมด SendRepeating ในโหมดนี้ ออบเจ็กต์ของไคลเอ็นต์จะส่งลำดับข้อความ EchoRequest ที่ซ้ำกันไปยังเพียร์ตามช่วงเวลาที่กำหนดค่าไว้ คุณยกเลิกโหมด SendRepeating ได้โดยเรียกใช้เมธอด Stop()

มัลติแคสต์และออกอากาศ

คุณสามารถใช้ออบเจ็กต์ WeaveEchoClient เพื่อส่งคำขอ EchoRequests ไปยังผู้รับหลายรายพร้อมกันโดยกำหนดค่าออบเจ็กต์ การเชื่อมโยง ด้วยที่อยู่ IPv6 แบบมัลติแคสต์ หรือที่อยู่การออกอากาศเครือข่ายภายในของ IPv4 (255.255.255.255) เมื่อออบเจ็กต์ WeaveEchoClient ตรวจพบที่อยู่เพียร์แคสต์หรือการกระจายข้อมูล จะเข้าสู่โหมด MultiResponse โดยอัตโนมัติเมื่อส่ง EchoRequest

ในโหมดนี้ ออบเจ็กต์จะยังคงตรวจจับและส่งข้อความ EchoResponse ขาเข้าทั้งหมดที่มาถึงในการแลกเปลี่ยนเดียวกัน ออบเจ็กต์จะยังคงอยู่ในโหมด MultiResponse จนกว่า 1) แอปพลิเคชันจะเรียกใช้ Stop() หรือ Send(), 2) ในโหมด SendRepeating เวลาที่จะส่งคำขออีก หรือ 3) ไม่ได้รับการตอบสนองและหมดเวลารับ

เหตุการณ์ API

ในระหว่างการดำเนินการ ออบเจ็กต์ WeaveEchoClient จะเรียกใช้แอปพลิเคชันเพื่อขอการดำเนินการเฉพาะหรือส่งการแจ้งเตือนเหตุการณ์สำคัญ การเรียกเหตุการณ์ API เหล่านี้จะเรียกใช้ฟังก์ชันเรียกกลับที่กำหนดค่าไว้ในปัจจุบันบนออบเจ็กต์ของไคลเอ็นต์ แอปพลิเคชันสามารถเปลี่ยนสถานะของไคลเอ็นต์ในระหว่างการเรียกกลับของเหตุการณ์ได้ ยกเว้นที่ระบุไว้ ข้อยกเว้นโดยรวมประการหนึ่งคือเมธอด Shutdown() ของออบเจ็กต์ ซึ่งอาจไม่มีการเรียกใช้ในระหว่างการเรียกกลับ

กําหนดเหตุการณ์ API ต่อไปนี้

PreparePayload

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

RequestSent

มีการส่งข้อความ EchoRequest ไปยังเพียร์

ResponseReceived

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

CommunicationError

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

ResponseTimeout

ไม่ได้รับ EchoResponse ในเวลาที่กำหนด การหมดเวลาการตอบกลับจะควบคุมโดยพร็อพเพอร์ตี้ defaultResponseTimeout ในออบเจ็กต์ การเชื่อมโยง

RequestAborted

ระบบล้มเลิกการแลกเปลี่ยน Echo ที่กำลังดำเนินการอยู่เนื่องจากมีการส่งคำขอให้ส่งคำขอ EchoRequest อีกครั้งก่อนที่จะได้รับการตอบกลับข้อความก่อนหน้า กรณีนี้อาจเกิดขึ้นในโหมด SendRepeating เมื่อถึงเวลาส่ง EchoRequest ครั้งถัดไป กรณีนี้อาจเกิดขึ้นได้หากแอปพลิเคชันเรียก Send() หลังจากส่ง EchoRequest ไปแล้ว แต่ก่อนที่จะได้รับการตอบกลับ

เมื่อออบเจ็กต์อยู่ในโหมด MultiResponse เหตุการณ์จะถูกระงับหากได้รับข้อความ EchoResponse อย่างน้อย 1 รายการ

ผู้ผลิตและผู้ทำลาย

WeaveEchoClient(void)

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

EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam) typedef
void(*
EventType{
  kEvent_PreparePayload = 1,
  kEvent_RequestSent = 2,
  kEvent_ResponseReceived = 3,
  kEvent_CommunicationError = 4,
  kEvent_ResponseTimeout = 5,
  kEvent_RequestAborted = 6,
  kEvent_DefaultCheck = 100
}
enum
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
enum

แอตทริบิวต์สาธารณะ

AppState
void *
ตัวชี้ไปยังข้อมูลเฉพาะแอปพลิเคชัน

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

GetBinding(void) const
แสดงผลตัวชี้ไปยังออบเจ็กต์ Binding ที่เชื่อมโยงกับ WeaveEchoClient
GetEventCallback(void) const
EventCallback
แสดงผลตัวชี้ไปยังฟังก์ชันการเรียกกลับของเหตุการณ์ API ที่กำหนดค่าในปัจจุบันในออบเจ็กต์ WeaveEchoClient
GetState(void) const
ดึงข้อมูลสถานะปัจจุบันของออบเจ็กต์ WeaveEchoClient
Init(Binding *binding, EventCallback eventCallback, void *appState)
เริ่มต้นออบเจ็กต์ WeaveEchoClient
IsSendRrepeating() const
bool
แสดงผลเป็น "จริง" หากออบเจ็กต์ WeaveEchoClient อยู่ในโหมดการส่งซ้ำในขณะนี้
RequestInProgress() const
bool
แสดงผลเป็น "จริง" หากมีการส่ง 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

ป้อนพารามิเตอร์ไปยังเหตุการณ์ WeaveEchoClient API

nl::Weave::Profiles::Echo_Next::WeaveEchoClient::OutEventParam

ส่งออกพารามิเตอร์ไปยังเหตุการณ์ API WeaveEchoClient

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

EventCallback

void(* EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)

EventType

 EventType
พร็อพเพอร์ตี้
kEvent_CommunicationError

เกิดข้อผิดพลาดในการสื่อสารขณะส่ง EchoRequest หรือรอการตอบกลับ

kEvent_DefaultCheck

ใช้เพื่อตรวจสอบการจัดการเหตุการณ์เริ่มต้นที่ถูกต้องในแอปพลิเคชัน

kEvent_PreparePayload

แอปพลิเคชันจะขอให้เตรียมเพย์โหลดสำหรับคำขอ Echo

kEvent_RequestAborted

ระบบล้มเลิกการแลกเปลี่ยนเสียงสะท้อนที่กำลังดำเนินการอยู่เนื่องจากมีการส่งคำขอเพื่อเริ่มการแลกเปลี่ยนอื่น

kEvent_RequestSent

มีการส่งข้อความ EchoRequest ไปยังเพียร์

kEvent_ResponseReceived

ได้รับข้อความ EchoResponse จากเพื่อน

kEvent_ResponseTimeout

ไม่ได้รับ EchoResponse ในเวลาที่กำหนด

รัฐ

 State
พร็อพเพอร์ตี้
kState_Idle

ออบเจ็กต์ไคลเอ็นต์ไม่มีความเคลื่อนไหว

kState_NotInitialized

ออบเจ็กต์ของไคลเอ็นต์ยังไม่เริ่มต้น

kState_PreparingBinding

ออบเจ็กต์ของไคลเอ็นต์กำลังรอให้การเชื่อมโยงพร้อมใช้งาน

kState_RequestInProgress

ส่งข้อความ EchoRequest แล้ว และออบเจ็กต์ของไคลเอ็นต์กำลังรอการตอบสนอง

kState_WaitingToSend

เรียก SendRepeating() แล้ว และออบเจ็กต์ไคลเอ็นต์จะรออีกครั้งเพื่อส่ง EchoRequest ในครั้งถัดไป

แอตทริบิวต์สาธารณะ

AppState

void * AppState

ตัวชี้ไปยังข้อมูลเฉพาะแอปพลิเคชัน

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

GetBinding

Binding * GetBinding(
  void
) const 

แสดงผลตัวชี้ไปยังออบเจ็กต์ Binding ที่เชื่อมโยงกับ WeaveEchoClient

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

แสดงผลตัวชี้ไปยังฟังก์ชันการเรียกกลับของเหตุการณ์ API ที่กำหนดค่าในปัจจุบันในออบเจ็กต์ WeaveEchoClient

GetState

State GetState(
  void
) const 

ดึงข้อมูลสถานะปัจจุบันของออบเจ็กต์ WeaveEchoClient

เริ่มต้น

WEAVE_ERROR Init(
  Binding *binding,
  EventCallback eventCallback,
  void *appState
)

เริ่มต้นออบเจ็กต์ WeaveEchoClient

เริ่มต้นออบเจ็กต์ WeaveEchoClient เพื่อเตรียมส่งข้อความสะท้อนไปยังเพียร์

รายละเอียด
พารามิเตอร์
[in] binding
ออบเจ็กต์การเชื่อมโยงที่จะใช้เพื่อสร้างการสื่อสารกับโหนดเพียร์
[in] eventCallback
ตัวชี้ไปยังฟังก์ชันที่ออบเจ็กต์ WeaveEchoClient จะส่งเหตุการณ์ API ไปยังแอปพลิเคชัน
[in] appState
ตัวชี้ไปยังออบเจ็กต์ที่กำหนดโดยแอปพลิเคชันซึ่งจะถูกส่งกลับไปยังแอปพลิเคชันเมื่อใดก็ตามที่มีเหตุการณ์ API เกิดขึ้น

IsSendRrepeating

bool IsSendRrepeating() const 

แสดงผลเป็น "จริง" หากออบเจ็กต์ WeaveEchoClient อยู่ในโหมดการส่งซ้ำในขณะนี้

RequestInProgress

bool RequestInProgress() const 

แสดงผลเป็น "จริง" หากมีการส่ง EchoRequest และออบเจ็กต์ WeaveEchoClient กำลังรอการตอบกลับ

ส่ง

WEAVE_ERROR Send(
  void
)

ส่งข้อความ EchoRequest ไปยังเพียร์

เมธอดนี้จะเริ่มต้นกระบวนการส่งข้อความ EchoRequest ไปยังโหนดเพียร์ หากได้รับข้อความ EchoResponse ที่เกี่ยวข้องแล้ว ระบบจะส่งข้อความนั้นไปยังแอปพลิเคชันผ่านเหตุการณ์ ResponseReceived API

ขณะสร้างข้อความ EchoRequest แล้ว WeaveEchoClient จะส่งคำขอไปยังแอปพลิเคชันผ่านทางเหตุการณ์ PreparePayload API เพื่อเตรียมเพย์โหลดของข้อความ

หากออบเจ็กต์ Binding ไม่อยู่ในสถานะ "พร้อม" เมื่อมีการเรียกใช้เมธอดนี้ ระบบจะส่งคำขอไปยังเมธอด Binding::RequestPrepare() เพื่อเริ่มการจัดเตรียมแบบออนดีมานด์ การส่งจะอยู่ในคิวจนกว่ากระบวนการนี้จะเสร็จสมบูรณ์ ความลึกสูงสุดของคิวนี้คือ 1 ดังนั้น การเรียก Send() ระหว่างที่มีการส่งครั้งก่อนหน้าในคิวจะส่งผลให้มีการส่ง EchoRequest เพียงรายการเดียว

การเรียกใช้ Send() ในขณะที่ WeaveEchoClient อยู่ในโหมดการส่งซ้ำ (กล่าวคือ เนื่องจากการเรียก SendRepeating()) ก่อนหน้านี้จะมีผลในการเร่งและรีเซ็ตรอบการส่ง แต่ไม่นำ WeaveEchoClient ออกจากโหมดการส่งซ้ำ

ส่ง

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

ส่งข้อความ EchoRequest ไปยังเพียร์พร้อมเพย์โหลดที่ระบุ

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

เมื่อเรียกใช้เมธอดนี้ การเป็นเจ้าของบัฟเฟอร์เพย์โหลดที่ให้ไว้จะส่งไปที่ออบเจ็กต์ WeaveEchoClient ซึ่งมีหน้าที่ทำให้บัฟเฟอร์ดังกล่าวใช้งานได้ กรณีนี้เกิดขึ้นได้ไม่ว่าเมธอดจะเสร็จสมบูรณ์หรือมีข้อผิดพลาดก็ตาม

หากออบเจ็กต์ Binding ไม่อยู่ในสถานะ "พร้อม" เมื่อมีการเรียกใช้เมธอดนี้ ระบบจะส่งคำขอไปยังเมธอด Binding::RequestPrepare() เพื่อเริ่มการจัดเตรียมแบบออนดีมานด์ การส่งจะอยู่ในคิวจนกว่ากระบวนการนี้จะเสร็จสมบูรณ์ ความลึกสูงสุดของคิวนี้คือ 1 ดังนั้น การเรียก Send() ระหว่างที่มีการส่งครั้งก่อนหน้าในคิวจะส่งผลให้มีการส่ง EchoRequest เพียงรายการเดียว

การเรียกใช้ Send() ในขณะที่ WeaveEchoClient อยู่ในโหมดการส่งซ้ำ (กล่าวคือ เนื่องจากการเรียก SendRepeating()) ก่อนหน้านี้จะมีผลในการเร่งและรีเซ็ตรอบการส่ง แต่ไม่นำ WeaveEchoClient ออกจากโหมดการส่งซ้ำ

รายละเอียด
พารามิเตอร์
[in] payloadBuf
ออบเจ็กต์ PacketBuffer ที่มีข้อมูลเพย์โหลดซึ่งจะส่งไปยังเพียร์ การเป็นเจ้าของบัฟเฟอร์นี้จะส่งไปยังออบเจ็กต์ WeaveEchoClient ในทุกกรณี

SendRepeating

WEAVE_ERROR SendRepeating(
  uint32_t sendIntervalMS
)

เริ่มการส่งข้อความ EchoRequest ไปยังเพียร์ซ้ำ

เมธอดนี้จะเริ่มต้นกระบวนการส่งข้อความ EchoRequest ไปยังเพียร์ซ้ำ เมื่อได้รับข้อความ EchoResponse ข้อความได้รับการส่งไปยังแอปพลิเคชันผ่านเหตุการณ์ ResponseReceived API

เมื่อมีการเรียก SendRepeating() แล้ว WeaveEchoClient จะเข้าสู่โหมดการส่งซ้ำ ซึ่งจะทำงานไปจนกว่าจะมีการเรียก Stop() หรือเกิดข้อผิดพลาด Binding การเรียกใช้ SendRepeating() หลายครั้งจะมีผลในการรีเซ็ตรอบการส่งและอัปเดตช่วงเวลา

การส่งครั้งแรกของลำดับจะเกิดขึ้นเมื่อมีการเรียก SendRepeating() หรือเมื่อใดก็ตามที่ Binding พร้อมใช้งานหลังจากเรียก SendRepeating() (ดูด้านล่าง) การส่งครั้งต่อๆ ไปจะเกิดขึ้นหลังจากนั้นในช่วงเวลาที่ระบุ

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

หากออบเจ็กต์ Binding ไม่อยู่ในสถานะ "พร้อม" เมื่อถึงเวลาส่งข้อความ ระบบจะส่งคำขอไปยังเมธอด Binding::RequestPrepare() เพื่อเริ่มการจัดเตรียมแบบออนดีมานด์ ระบบจะหยุดการส่งข้อความซ้ำถัดไปไว้ชั่วคราวจนกว่ากระบวนการนี้จะเสร็จสมบูรณ์ ความล้มเหลวในระหว่างการเตรียม Binding แบบออนดีมานด์จะทำให้ WeaveEchoClient ออกจากโหมดการส่งซ้ำ

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

ตั้งค่าฟังก์ชันเรียกกลับของเหตุการณ์ API ในออบเจ็กต์ WeaveEchoClient

ปิดการทำงาน

void Shutdown(
  void
)

ปิดออบเจ็กต์ WeaveEchoClient ที่เริ่มต้นก่อนหน้านี้

โปรดทราบว่าจะเรียกเมธอดนี้ได้ก็ต่อเมื่อมีการเรียกเมธอด Init() ก่อนหน้านี้เท่านั้น

หยุด

void Stop(
  void
)

หยุดการแลกเปลี่ยนเสียงสะท้อนที่กำลังดำเนินการอยู่และยกเลิกโหมดการส่งซ้ำ

WeaveEchoClient

 WeaveEchoClient(
  void
)

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

DefaultEventHandler

void DefaultEventHandler(
  void *appState,
  EventType eventType,
  const InEventParam & inParam,
  OutEventParam & outParam
)

ตัวแฮนเดิลเริ่มต้นสำหรับเหตุการณ์ API ของ WeaveEchoClient

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

รายละเอียด
พารามิเตอร์
[in] appState
ตัวชี้ไปยังข้อมูลสถานะที่กำหนดโดยแอปพลิเคชันที่เชื่อมโยงกับออบเจ็กต์ไคลเอ็นต์
[in] eventType
รหัสเหตุการณ์ที่ส่งผ่านโดยโค้ดเรียกกลับของเหตุการณ์
[in] inParam
การอ้างอิงของพารามิเตอร์เหตุการณ์อินพุตที่ส่งผ่านโดยโค้ดเรียกกลับของเหตุการณ์
[in] outParam
การอ้างอิงของพารามิเตอร์เหตุการณ์เอาต์พุตที่ส่งผ่านโดยโค้ดเรียกกลับของเหตุการณ์