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. בדומה לפרוטוקול הפינג של ICMP, ניתן להשתמש בפרוטוקול Weave Echo כדי לבדוק את הפעילות והיכולת להגיע לצומת של Weave.
אפליקציות יכולות להשתמש במחלקה WeaveEchoClient כדי לשלוח הודעות חד-פעמיות או חוזרות על EchoRequest אל צומת של אפליקציה שזוהה על ידי אובייקט Binding. קיימת מחלקה תואמת לתגובה לבקשות הד (ראו WeaveEchoServer).
קישור לקוח
ה-WeaveEchoClient משתמש באובייקט Binding של Weave, שמשמש לזיהוי וליצירה של תקשורת עם הנמען המיועד של בקשות ההד. אפשר להגדיר ולהכין את ה-Binding לפני האתחול של האובייקט WeaveEchoClient, או להשאיר אותו לא מוכן. במקרה כזה, ה-WeaveEchoClient יבקש מ-WeaveEchoClient לבקש הכנה לפי דרישה של הקישור (פרטים נוספים זמינים במאמר Binding::RequestPrepare()).
אם תהליך ההכנה של הקישור ייכשל אחרי המעבר למצב 'מוכן', תישלח גם בקשה להכנה לפי דרישה.
מצב שליחה חוזרת
ניתן להשתמש במתודה SendRepeating() כדי להעביר את ה-WeaveEchoClient למצב SendRepeating. במצב הזה, אובייקט הלקוח שולח רצף חוזר של הודעות EchoRequest לעמיתים במרווח זמן שהוגדר. אפשר לבטל את מצב SendRepeating באמצעות קריאה ל-method Stop().
שידורים מרובים ורחבים
ניתן להשתמש באובייקט WeaveEchoClient כדי לשלוח EchoRequests לנמענים מרובים בו-זמנית, על ידי הגדרת האובייקט Binding עם כתובת multicast מתאימה של IPv6 או כתובת שידור מקומית של IPv4 (255.255.255.255). כשהאובייקט WeaveEchoClient מזהה כתובת של פרוטוקול Multicast או של רשת שכנה, הוא עובר באופן אוטומטי למצב MultiResponse בעת שליחת ה-EchoRequest.
במצב הזה, האובייקט ממשיך להאזין לכל הודעות EchoResponse הנכנסות ולשלוח אותן, שמגיעות באותה פלטפורמת Exchange. האובייקט נשאר במצב MultiResponse עד: 1) האפליקציה קוראת ל-Stop() או Send(), 2) במצב SendRepeating, הזמן מגיע לשליחת בקשה נוספת, או 3) לא מתקבלת תגובה והזמן הקצוב לתפוגה של קבלה פג.
אירועי API
במהלך הפעילות שלו, האובייקט WeaveEchoClient יקרא לאפליקציה כדי לבקש פעולות ספציפיות או לשלוח התראות על אירועים חשובים. הקריאות האלה לאירועי API מתבצעות לפונקציית הקריאה החוזרת שמוגדרת כרגע באובייקט הלקוח. אלא אם צוין אחרת, האפליקציות יכולות לשנות את מצב הלקוח במהלך קריאה חוזרת של אירוע. יוצא הדופן היחיד הוא שיטת Shutdown() של האובייקט, והיא לא יכולה להתבצע אף פעם במהלך קריאה חוזרת.
אירועי ה-API הבאים מוגדרים:
PreparePayload
ה-WeaveEchoClient עומד ליצור הודעת EchoRequest ומבקש מהאפליקציה לספק מטען ייעודי (payload). אם האפליקציה רוצה, היא עשויה להחזיר PacketBuffer חדש שמכיל את נתוני המטען הייעודי (payload). אם האפליקציה לא מטפלת באירוע הזה, יישלח אוטומטית EchoRequest עם מטען ייעודי (payload) באורך אפס. ייתכן שהאפליקציה לא תשנה את המצב של WeaveEchoClient במהלך הקריאה החוזרת (callback) הזו.
RequestSent
הודעת EchoRequest נשלחה לעמית.
ResponseReceived
התקבלה הודעת EchoResponse מהעמית. הארגומנטים לאירוע מכילים את המטען הייעודי (payload) של התגובה ומטא-מידע לגבי הודעת התשובה.
CommunicationError
אירעה שגיאה במהלך יצירה או שליחה של EchoRequest, או בזמן ההמתנה לתגובה. דוגמאות לשגיאות שעשויות להתרחש בזמן ההמתנה לתשובה הן שגיאות חשובות או סגירה לא צפויה של החיבור. הארגומנטים לאירוע מכילים את סיבת השגיאה.
ResponseTimeout
תגובת EchoResponse לא התקבלה בזמן שהוקצב. הזמן הקצוב לתפוגה של תגובה נקבע על ידי המאפיין DefaultResponseTimeout באובייקט Binding.
RequestAborted
חילופי הד בפעולה בוטלה כי נשלחה בקשה לשלוח EchoRequest נוסף לפני שהתקבלה תשובה להודעה הקודמת. מצב זה עשוי להופיע במצב SendRepeating כשיגיע הזמן לשליחת ה-EchoRequest הבא. זה יכול לקרות גם אם האפליקציה קוראת ל-Send() אחרי ש-EchoRequest נשלח אבל לפני מתקבלת תגובה.
כשהאובייקט במצב 'תגובה מרובה', האירוע מושתק אם התקבלה הודעת EchoResponse אחת לפחות.
בנייה |
|
---|---|
WeaveEchoClient(void)
|
סוגים ציבוריים |
|
---|---|
EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)
|
typedefvoid(*
|
EventType{
|
טיפוסים בני מנייה (enum) |
State{
|
טיפוסים בני מנייה (enum) |
מאפיינים ציבוריים |
|
---|---|
AppState
|
void *
מצביע לנתונים ספציפיים לאפליקציה.
|
פונקציות ציבוריות |
|
---|---|
GetBinding(void) const
|
Binding *
מחזירה מצביע לאובייקט Binding המשויך ל-WeaveEchoClient.
|
GetEventCallback(void) const
|
EventCallback
הפונקציה מחזירה מצביע לפונקציית הקריאה החוזרת של אירוע ה-API שמוגדרת כרגע באובייקט WeaveEchoClient.
|
GetState(void) const
|
מאחזרים את המצב הנוכחי של האובייקט WeaveEchoClient.
|
Init(Binding *binding, EventCallback eventCallback, void *appState)
|
מאתחלים אובייקט WeaveEchoClient.
|
IsSendRrepeating() const
|
bool
הפונקציה מחזירה true אם האובייקט WeaveEchoClient נמצא כרגע במצב שליחה חוזרת.
|
RequestInProgress() const
|
bool
הפונקציה מחזירה true אם נשלח EchoRequest והאובייקט WeaveEchoClient ממתין לתגובה.
|
Send(void)
|
שליחת הודעת EchoRequest לעמיתים.
|
Send(PacketBuffer *payloadBuf)
|
שליחת הודעת EchoRequest לעמיתים עם מטען ייעודי (payload) ספציפי.
|
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
handler ברירת מחדל לאירועי API של WeaveEchoClient.
|
מבנים |
|
---|---|
nl:: |
צריך להזין פרמטרים לאירוע WeaveEchoClient של API. |
nl:: |
פרמטרים של פלט לאירוע WeaveEchoClient של API. |
סוגים ציבוריים
EventCallback
void(* EventCallback)(void *appState, EventType eventType, const InEventParam &inParam, OutEventParam &outParam)
EventType
EventType
מאפיינים | |
---|---|
kEvent_CommunicationError
|
אירעה שגיאת תקשורת בעת שליחת EchoRequest או המתנה לתגובה. |
kEvent_DefaultCheck
|
משמש לאימות הטיפול הנכון באירועים באפליקציה כברירת מחדל. |
kEvent_PreparePayload
|
האפליקציה מבקשת להכין את המטען הייעודי (payload) לבקשת ה-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.
Init
WEAVE_ERROR Init( Binding *binding, EventCallback eventCallback, void *appState )
מאתחלים אובייקט WeaveEchoClient.
לאתחל אובייקט WeaveEchoClient כהכנה לשליחת הודעות הד לעמיתים.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
IsSendRrepeating
bool IsSendRrepeating() const
הפונקציה מחזירה true אם האובייקט WeaveEchoClient נמצא כרגע במצב שליחה חוזרת.
RequestInProgress
bool RequestInProgress() const
הפונקציה מחזירה true אם נשלח EchoRequest והאובייקט WeaveEchoClient ממתין לתגובה.
שליחה
WEAVE_ERROR Send( void )
שליחת הודעת EchoRequest לעמיתים.
שיטה זו מפעילה את התהליך של שליחת הודעת EchoRequest לצומת של השכנה. אם וכאשר תתקבל הודעת EchoResponse תואמת, היא תימסר לאפליקציה דרך אירוע ResponseReceived API.
כשיוצרים את ההודעה EchoRequest, ה-WeaveEchoClient שולח בקשה לאפליקציה, באמצעות האירוע PreparePayload API, כדי להכין את המטען הייעודי (payload) של ההודעה.
אם האובייקט Binding לא נמצא במצב Ready (מוכן) לשיטה הזו, תישלח בקשה למתודה Binding::RequestPrepare() כדי להתחיל הכנה לפי דרישה. פעולת השליחה תיכנס לתור עד לסיום התהליך. העומק המקסימלי של התור הזה הוא אחד. לכן, כל קריאה ל-Send() בזמן שיש שליחה קודמת בתור, תוביל לשליחת EchoRequest בלבד.
קריאה ל-Send() בזמן ש-WeaveEchoClient נמצא במצב שליחה חוזרת (כלומר, בגלל קריאה קודמת ל-SendRepeating()) משפיעה על האצה ואיפוס של מחזור השליחה, אבל לא מוציאה את WeaveEchoClient ממצב שליחה חוזרת.
שליחה
WEAVE_ERROR Send( PacketBuffer *payloadBuf )
שליחת הודעת EchoRequest לעמיתים עם מטען ייעודי (payload) ספציפי.
שיטה זו מפעילה את התהליך של שליחת הודעת EchoRequest לצומת של השכנה. התוכן של מאגר הנתונים הזמני שסופק יישלח לעמית בתור המטען הייעודי (payload) של הודעת EchoRequest. אם וכאשר תתקבל הודעת EchoResponse תואמת, היא תימסר לאפליקציה דרך אירוע ResponseReceived API.
לאחר קריאה לשיטה הזו, הבעלות על מאגר הנתונים הזמני שסופק עוברת לאובייקט WeaveEchoClient, והוא באחריות לשחרר אותו. הדבר נכון בין אם ה-method הושלמה בהצלחה ובין אם עם שגיאה.
אם האובייקט Binding לא נמצא במצב Ready (מוכן) לשיטה הזו, תישלח בקשה למתודה Binding::RequestPrepare() כדי להתחיל הכנה לפי דרישה. פעולת השליחה תיכנס לתור עד שהתהליך יושלם. העומק המקסימלי של התור הזה הוא אחד. לכן, כל קריאה ל-Send() בזמן שיש שליחה קודמת בתור, תוביל לשליחת EchoRequest בלבד.
קריאה ל-Send() בזמן ש-WeaveEchoClient נמצא במצב שליחה חוזרת (כלומר, בגלל קריאה קודמת ל-SendRepeating()) משפיעה על האצה ואיפוס של מחזור השליחה, אבל לא מוציאה את WeaveEchoClient ממצב שליחה חוזרת.
פרטים | |||
---|---|---|---|
פרמטרים |
|
SendRepeating
WEAVE_ERROR SendRepeating( uint32_t sendIntervalMS )
התחלת שליחה של רצף חוזר של הודעות EchoRequest לעמית.
השיטה הזו מפעילה תהליך חוזר של שליחת הודעות EchoRequest לעמית. מאחר שהודעות EchoResponse מתקבלות מהעמית, הן נשלחות לאפליקציה דרך אירוע ResponseReceived API.
כשמתבצעת קריאה ל-SendRepeating(), ה-WeaveEchoClient עובר למצב שליחה חוזרת שבו הוא נשאר עד לקריאה של Stop() או עד שמתרחשת שגיאת Binding. קריאה ל-SendRepeating() מספר פעמים משפיעה על איפוס מחזור השליחה ועדכון המרווח.
השליחה הראשונית של רצף מתרחשת בזמן הקריאה ל-SendRepeating(), או בכל פעם שה-Binding מוכן אחרי הקריאה ל-SendRepeating() (ראו בהמשך). השליחות הבאות מתבצעות לאחר מכן במרווח הזמן שצוין.
בכל פעם שמתרחשת שליחה, ה-WeaveEchoClient שולח בקשה לאפליקציה, באמצעות האירוע PreparePayload API, כדי להכין את המטען הייעודי (payload) של ההודעה.
אם האובייקט Binding לא נמצא במצב Ready (מוכן) כשמגיע הזמן לשלוח הודעה, תישלח בקשה למתודה Binding::RequestPrepare() כדי להתחיל הכנה לפי דרישה. הודעות חוזרות נוספות יושהו עד שהתהליך יסתיים. תקלה במהלך הכנת הקישור על פי דרישה תגרום ל-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 )
handler ברירת מחדל לאירועי API של WeaveEchoClient.
אפליקציות נדרשות לקרוא ל-method הזה לכל אירועי API שהם לא מזהים או לא מטפלים בהם. הפרמטרים שסופקו חייבים להיות זהים לפרמטרים שמועברים על ידי אובייקט הלקוח אל פונקציית המטפל באירועים של האפליקציה.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|