nl:: Weave:: Profiles:: DataManagement_Current:: CommandSender
#include <src/lib/profiles/data-management/Current/CommandSender.h>
סיכום
הערה:המחלקה הזו כוללת אנקפסולציה של פרטי הפרוטוקול של שליחת פקודות, כדי לפשט את המנגנונים המעורבים באפליקציות. האפליקציה מספקת PacketBuffer שמכיל את המטען הייעודי (payload) של הפקודה, וכן קבוצה אופציונלית של ארגומנטים שמשנים את התוכן של כותרת הפקודה וכן את ההתנהגות של הפקודה. התועלת של wrapper זה לטיפול בפקודות אכן מוגבלת, בעיקר בשל המורכבות/הגמישות שכרוכות באימות אבטחה ובסידורי נתונים/ביטול סריאליזציה של נתונים.
הפרטים עבור אימות הפקודה עדיין טרם נקבעו
המחלקה הזו גם עוזרת לאפליקציות להסיק אם הנתונים ב-TraitDataSink המשויך תפסו את תופעות הלוואי של הפקודה (על סמך הגרסה שסופקה בתגובת הפקודה). האפליקציה אחראית לניהול האחסון של האובייקט.
אפשר ליצור אובייקט מהמחלקה הזו באמצעות קישור של Weave, שמשמש כברירת המחדל לקישור שבו משתמשים לשליחת פקודות. המשתמש יכול גם לספק קישור לכל קריאה ל-SendCommand(), וכך לבטל את ברירת המחדל Binding. אין צורך לספק ערך Binding כברירת מחדל, אבל כל קישור שסופק ל-CommandSender חייב כבר להיות מאותחל.
EventCallback
המשתמש חייב להגדיר פונקציה מהסוג הזה אם הוא רוצה לקבל עדכון לגבי אירועים שמתרחשים לאחר שליחת הפקודה (ראו "אירועי API" בהמשך). הערך יכול להיות NULL אם למשתמש לא חשוב מה קורה לאחר שליחת הפקודה.
אירועי API
האירועים הבאים הם התוצאות האפשריות לאחר שליחת פקודה:
CommunicationError
אירעה שגיאה במהלך יצירת או שליחת ה-Command, או בזמן ההמתנה לתשובה. דוגמאות לשגיאות שעשויות להתרחש בזמן המתנה לתשובה הן שגיאות מרכזיות או סגירה בלתי צפויה של החיבור. סיבת השגיאה תיכלל בארגומנט InEventParam של ה-handler של EventCallback.
InProgressReceived
הנמען יכול לשלוח הודעת 'בתהליך' שמציינת שהפקודה התקבלה, אבל עדיין לא הושלמה. לאחר השלמת הפעולה, הנמען ישלח תשובה או דוח סטטוס. אין צורך לשלוח הודעת 'בתהליך'.
StatusReportReceived
קבלה של StatusReport מרמזת על שגיאה בעיבוד הפקודה. ניתן לגשת לדוח StatusReport דרך InEventParam.
ResponseReceived
קבלת תגובה מרמזת שנמען ה-Command טיפל ב-Command בהצלחה. התשובה יכולה להכיל מטען ייעודי (payload), או לא. אם האפליקציה מבקשת לשמור את מאגר החבילות, הוא יכול לבצע קריאה ל-ExchangeContext::AddRef() כדי להגדיל את מספר ההפניות.
סוגים ציבוריים |
|
---|---|
EventCallback)(void *const aAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutEventParam)
|
typedefvoid(*
|
EventType
|
טיפוסים בני מנייה (enum) |
מאפיינים ציבוריים |
|
---|---|
mAppState = NULL
|
void *
|
mSyncronizedTraitState = NULL
|
פונקציות סטטיות ציבוריות |
|
---|---|
DefaultEventHandler(void *aAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
|
void
|
תפקידים ציבוריים |
|
---|---|
Close(bool aAbortNow)
|
void
|
Init(nl::Weave::Binding *aBinding, const EventCallback aEventCallback, void *const aAppState)
|
|
SendCommand(nl::Weave::PacketBuffer *aPayload, nl::Weave::Binding *aBinding, ResourceIdentifier & aResourceId, uint32_t aProfileId, uint32_t aCommandType)
|
|
SendCommand(nl::Weave::PacketBuffer *aPayload, nl::Weave::Binding *aBinding, SendParams & aSendParams)
|
|
SetSynchronizedTraitState(SynchronizedTraitState *aTraitState)
|
void
|
מבנים |
|
---|---|
nl:: |
הנתונים שהוחזרו לשולח על ידי הנמען של הפקודה בהתאמה אישית. |
nl:: |
הנתונים הוחזרו לאובייקט CommandSender מפונקציית EventCallback. |
nl:: |
מקודדת ארגומנטים שיועברו אל SendCommand(). |
nl:: |
סוגים ציבוריים
EventCallback
void(* EventCallback)(void *const aAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutEventParam)
EventType
EventType
מאפיינים ציבוריים
mAppState
void * mAppState = NULL
mSyncronizedTraitState
SynchronizedTraitState * mSyncronizedTraitState = NULL
פונקציות סטטיות ציבוריות
DefaultEventHandler
void DefaultEventHandler( void *aAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
תפקידים ציבוריים
סגירה
void Close( bool aAbortNow )
הפעלה
WEAVE_ERROR Init( nl::Weave::Binding *aBinding, const EventCallback aEventCallback, void *const aAppState )
SendCommand
WEAVE_ERROR SendCommand( nl::Weave::PacketBuffer *aPayload, nl::Weave::Binding *aBinding, ResourceIdentifier & aResourceId, uint32_t aProfileId, uint32_t aCommandType )
SendCommand
WEAVE_ERROR SendCommand( nl::Weave::PacketBuffer *aPayload, nl::Weave::Binding *aBinding, SendParams & aSendParams )