nl:: Weave:: Profiles:: DataManagement_Current:: CommandSender
#include <src/lib/profiles/data-management/Current/CommandSender.h>
סיכום
הערה: הכיתה הזו כוללת את פרטי הפרוטוקול של שליחת פקודות, וכך מפשטת את המנגנונים של אפליקציות. האפליקציה מספקת PacketBuffer שמכיל את המטען הייעודי (payload) של הפקודה, וגם קבוצה אופציונלית של ארגומנטים שמשנים את התוכן של כותרת הפקודה וגם את ההתנהגות של הפקודה. התועלת של ה-wrapper הזה בטיפול בפקודות מוגבלת, בעיקר בגלל המורכבות/הגמישות הכרוכה באימות האבטחה ובעיבוד סריאליזציה של נתונים או ביטול סריאליזציה של נתונים.
הפרטים לגבי אימות הפקודה עדיין טרם נקבעו
הסיווג הזה גם עוזר לאפליקציות להסיק אם הנתונים ב-TraitDataSink המשויך אליו מגיבים לתופעות הלוואי של הפקודה (על סמך הגרסה שסופקה בתגובה לפקודה). האפליקציה אחראית לניהול האחסון של האובייקט הזה.
שזירה Binding
אפשר לאתחל אובייקט במחלקה הזו באמצעות Binding של Weave, שישמש כקישור ברירת המחדל לשליחת פקודות. המשתמש יכול גם לספק Binding לכל קריאה של SendCommand(), והוא יבטל את ברירת המחדל של Binding. אין צורך לספק קישור ברירת מחדל, אבל כל קישור שמסופק ל-CommandSender כבר צריך להיות מאתחל.
EventCallback
המשתמש חייב להגדיר פונקציה מהסוג הזה אם הוא רוצה לקבל עדכונים לגבי אירועים שמתרחשים לאחר שליחת הפקודה (ראו 'אירועי API' בהמשך). הערך יכול להיות NULL אם למשתמש לא אכפת מה קורה לאחר שליחת הפקודה.
אירועי API
האירועים הבאים הם התוצאות האפשריות אחרי שליחת פקודה:
CommunicationError
אירעה שגיאה במהלך היצירה או השליחה של הפקודה, או בזמן ההמתנה לתגובה. דוגמאות לשגיאות שעשויות להתרחש בזמן ההמתנה לתשובה הן שגיאות חשובות או סגירה לא צפויה של החיבור. סיבת השגיאה תיכלל בארגומנט InEventParam ב-handler של EventCallback.
InProgressReceived
הנמען יכול לשלוח הודעת 'בתהליך' הודעה שפירושה שCommand התקבל, אבל עדיין לא הושלם. בסיום התהליך, הנמען ישלח תשובה או דוח סטטוס. נשלחת הודעת 'בתהליך' אין צורך בהודעה.
StatusReportReceived
קבלה של דוח סטטוס מרמזת על שגיאה בעיבוד הפקודה. ניתן לגשת לדוח הסטטוס דרך InEventParam.
ResponseReceived
קבלת תשובה מעידה על כך שנמען ה-Command טיפל ב-Command בהצלחה. יכול להיות שהתשובה מכילה מטען ייעודי (payload) או לא. אם האפליקציה רוצה לשמור את מאגר החבילות, ייתכן שהיא תבצע קריאה ל-ExchangeContext::AddRef() כדי להגדיל את מספר ה-ref.
סוגים ציבוריים |
|
---|---|
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 )
Init
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 )