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

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

โหมด SendReturning

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

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

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

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

เหตุการณ์ API

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

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

PreparePayload

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

RequestSent

ระบบส่งข้อความ EchoRequest ไปยังแอปเทียบเท่าแล้ว

ResponseReceived

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

CommunicationError

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

ResponseTimeout

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

RequestAborted

การแลกเปลี่ยน Echo ที่กำลังดำเนินการถูกล้มเลิกเนื่องจากมีการส่งคำขอให้ส่ง EchoRequest อีกครั้งก่อนจะได้รับการตอบกลับสำหรับข้อความก่อนหน้า ซึ่งสามารถเกิดขึ้นได้ในโหมด SendReturning เมื่อถึงเวลาส่ง 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
แสดงผลตัวชี้ไปยังฟังก์ชัน Callback ของเหตุการณ์ 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
ตั้งค่าฟังก์ชัน Callback ของเหตุการณ์ API ในออบเจ็กต์ WeaveEchoClient
Shutdown(void)
void
ปิดออบเจ็กต์ WeaveEchoClient ที่เริ่มต้นไว้ก่อนหน้านี้
Stop(void)
void
หยุดการแลกเปลี่ยน Echo ที่กำลังดำเนินการอยู่และยกเลิกโหมดการส่งซ้ำ

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

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

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

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

EventCallback

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

EventType

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

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

kEvent_DefaultCheck

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

kEvent_PreparePayload

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

kEvent_RequestAborted

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

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 

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

GetState

State GetState(
  void
) const 

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

Init

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

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

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

รายละเอียด
พารามิเตอร์
[in] binding
ออบเจ็กต์ 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 ไม่อยู่ในสถานะ Ready เมื่อมีการเรียกใช้เมธอดนี้ ระบบจะส่งคำขอไปยังเมธอด Binding::RequestPrepare() เพื่อเริ่มการเตรียมการตามคำขอ การดำเนินการส่งจะอยู่ในคิวจนกว่ากระบวนการนี้จะเสร็จสมบูรณ์ ความลึกสูงสุดของคิวนี้คือ 1 ดังนั้นการเรียกใช้ Send() ขณะที่มีการส่งก่อนหน้าในคิวจะส่งผลให้ระบบส่ง EchoRequest เพียงครั้งเดียวเท่านั้น

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

ส่ง

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

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

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

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

หากออบเจ็กต์ Binding ไม่อยู่ในสถานะ Ready เมื่อมีการเรียกใช้เมธอดนี้ ระบบจะส่งคำขอไปยังเมธอด 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
)

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

ปิดการทำงาน

void Shutdown(
  void
)

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

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

หยุด

void Stop(
  void
)

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

WeaveEchoClient

 WeaveEchoClient(
  void
)

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

DefaultEventHandler

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

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

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

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