nl::Weave::Profiles::DataManagement_Legacy::Binding

#include <src/lib/profiles/data-management/Legacy/Binding.h>

המחלקה Binding מנהלת את מצב התקשורת מטעם ישות אפליקציה באמצעות Weave.

סיכום

כאשר יישום רוצה להשתמש ב-Weave כדי לתקשר עם ישות מרוחקת, קיים מגוון רחב של אפשרויות. הכיתה קישור מרכזת את האפשרויות האלה ומארגנת אותן כך שהדברים הקלים יהיו קלים והדברים הקשים יותר יהיו לפחות ניתנים לניהול. האפשרויות הכלולות כוללות:

  • תקשורת unicast UDP לצומת עמית ידוע.
  • שידור UDP עם צומת 'כל'.
  • בתקשורת WRMP מסוג unicast עם צומת עמית ידוע.
  • תקשורת ב-TCP עם צומת ידוע של עמית.
  • תקשורת TCP עם נקודת קצה של שירות ידועה באמצעות מופע של מנהל שירות כדי להגדיר את ההגדרות.
  • תקשורת TCP על סמך חיבור שנוצר מראש.

בונים והורסים

Binding(void)
בנאי ברירת המחדל של אובייקטים מקשר.
~Binding(void)
ה-Destructor לאובייקטים מקשרים.

סוגים ציבוריים

@165{
  kState_Incomplete = 0,
  kState_Completing = 1,
  kState_Complete = 2
}
טיפוסים בני מנייה (enum)
קבוצת מצבי האובייקט קישור.

מאפיינים ציבוריים

mAuthMode
WeaveAuthMode
מצב האימות של Weave שבו ייעשה שימוש.
mConnection
מצביע לחיבור Weave שנמצא כרגע בשימוש בקישור הזה.
mEngine
הפניה לאובייקט ProtocolEngine שקשור לקישור הזה.
mPeerNodeId
uint64_t
מזהה הצומת של 64 ביט של יעד הקישור.
mServiceMgr
מצביע לאובייקט (אופציונלי) ServiceManager כדי להשתמש בו להשלמת הקישור הזה.
mState
uint8_t
מצב האובייקט קישור הנוכחי.
mTransport
uint8_t
ההעברה שבה משתמשים כדי להשלים את הקישור הזה.

תפקידים ציבוריים

CompleteConfirm(WeaveConnection *aConnection)
void
טיפול באישור של בקשת חיוב.
CompleteConfirm(StatusReport & aReport)
void
טיפול בכשל בבקשת הקישור.
CompleteConfirm(void)
void
טיפול באישור של בקשת חיוב.
CompleteRequest(ProtocolEngine *aEngine)
מבקשים להשלים קישור.
Connect(WeaveConnection *aConnection)
צריך להשלים קישור TCP על ידי מתן חיבור מלא.
Finalize(void)
void
'לא הושלם' לקישור ומשחררים אותו.
Finalize(WEAVE_ERROR aErr)
void
'לא הושלם' לקישור ומשחררים אותו.
Free(void)
void
מבטלים את מצב הקישור.
GetExchangeCtx(WeaveExchangeManager *aExchangeMgr, void *aAppState)
מפיקים אובייקט ExchangeContext מ-Binding.
IncompleteIndication(StatusReport & aReport)
void
טפל בכשל של קישור.
Init(const uint64_t & aPeerNodeId)
אפשר להפעיל קישור עם מזהה צומת בלבד.
Init(const uint64_t & aPeerNodeId, uint8_t aTransport)
מפעילים אובייקט קישור על סמך מזהה העמיתים וההעברה.
Init(const uint64_t & aServiceEpt, WeaveServiceManager *aServiceMgr, WeaveAuthMode aAuthMode)
מפעילים אובייקט קישור לנקודת קצה של שירות.
Init(WeaveConnection *aConnection)
מאתחלים אובייקט Binding באמצעות WeaveConnection.
IsComplete(void)
bool
בודקים אם הקישור הושלם.
IsFree(void)
bool
הבדיקה לא כרוכה בתשלום.
UncompleteRequest(void)
void
צריך לגרום לקישור להיות חלקי.
UncompleteRequest(WEAVE_ERROR aErr)
void
צריך לגרום לקישור להיות חלקי.

סוגים ציבוריים

@165

 @165

קבוצת מצבי האובייקט קישור.

תכונות
kState_Complete

מצב הקישור המלא ומוכן לשימוש.

kState_Completing

המצב של קישור שנמצא בתהליך סיום.

kState_Incomplete

המצב הראשוני (והסופי) של קישור.

מאפיינים ציבוריים

mAuthMode

WeaveAuthMode mAuthMode

מצב האימות של Weave שבו ייעשה שימוש.

(READ_ONLY)

זהו מצב האימות המשמש בכל סוגי התקשורת שכפופה לקישור הזה.

mConnection

WeaveConnection * mConnection

מצביע לחיבור Weave שנמצא כרגע בשימוש בקישור הזה.

(לקריאה בלבד)

ניתן לאתחל קישור TCP באופן מיידי או בזמן ההשלמה של חיבור מיידי.

mEngine

ProtocolEngine * mEngine

הפניה לאובייקט ProtocolEngine שקשור לקישור הזה.

תהליך הקישור מתבצע בדרך כלל ביחס למנוע פרוטוקול מסוים, שמשמש בעיקר כדרך לגישה ל-MessageLayer. זה המקום שבו אנחנו עוקבים אחריו.

mPeerNodeId

uint64_t mPeerNodeId

מזהה הצומת של 64 ביט של יעד הקישור.

(לקריאה בלבד)

לכל קישור יש ישות יעד, ונקראת כאן. בנוסף למזהה צומת של Weave, זה עשוי לתת שם לנקודת קצה של שירות.

mServiceMgr

nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager * mServiceMgr

מצביע לאובייקט (אופציונלי) ServiceManager כדי להשתמש בו להשלמת הקישור הזה.

(לקריאה בלבד)

בעת קישור לשירות Weave, ייתכן שבזמן האתחול יסופק מזהה נקודת קצה של שירות ברמת 64 ביט במקום מזהה צומת של Weave. במקרה כזה, נדרש גם אובייקט ServiceManager כדי להשלים את הקישור. קישורים רגילים של TCP ו-WRMP אינם מחייבים אובייקט ServiceManager.

mState

uint8_t mState

מצב האובייקט קישור הנוכחי.

ניתן להריץ רק פעולת 'השלמה' אחת בכל פעם. בכל מקרה, אם מבקשים להשלים קישור מלא, הפונקציה פשוט מפעילה באופן מיידי את פונקציית האישור. משתנה המצב שבהמשך עוקב אחר המצב הנוכחי ומתפקד כנעילה.

mTransport

uint8_t mTransport

ההעברה שבה משתמשים כדי להשלים את הקישור הזה.

(לקריאה בלבד)

ערכים אפשריים ל-mTransport מוגדרים ב-DMConstants.h.

תפקידים ציבוריים

קישור

 Binding(
  void
)

בנאי ברירת המחדל של אובייקטים מקשר.

ניקוי כל המצב הפנימי.

CompleteConfirm

void CompleteConfirm(
  WeaveConnection *aConnection
)

טיפול באישור של בקשת חיוב.

פרטים
פרמטרים
[in] aConnection
מצביע ל-WeaveConnection פעיל ליעד הקישור.

CompleteConfirm

void CompleteConfirm(
  StatusReport & aReport
)

טיפול בכשל בבקשת הקישור.

פרטים
פרמטרים
[in] aReport
הפניה לאובייקט StatusReport שמתאר את הכשל.

CompleteConfirm

void CompleteConfirm(
  void
)

טיפול באישור של בקשת חיוב.

CompleteRequest

WEAVE_ERROR CompleteRequest(
  ProtocolEngine *aEngine
)

מבקשים להשלים קישור.

השלמת קישור, לפחות עבור חיבורים שמחייבים TCP, מתבצעת ביחס לאובייקט ProtocolEngine מסוים, שמספק גישה למופע של ExchangeManager.

פרטים
פרמטרים
[in] aEngine
מצביע לאובייקט ProtocolEngine שבשמו מתבצעת ההשלמה.
ערכים מוחזרים
WEAVE_NO_ERROR
בהצלחה.
WEAVE_ERROR_INCORRECT_STATE
אם הקישור כבר הושלם.
WEAVE_ERROR_NO_MEMORY
אם נדרש חיבור ואין אף חיבור זמין
החזרות
אחרת, כל שגיאה מסוג WEAVE_ERROR הוחזרה במהלך ניסיון ההתחברות.

קישור

WEAVE_ERROR Connect(
  WeaveConnection *aConnection
)

צריך להשלים קישור TCP על ידי מתן חיבור מלא.

לא ניתן להשתמש בקישור TCP שאותחל לאחרונה לפני השלמתו. בדרך כלל הדבר נעשה על פי דרישה כאשר האפליקציה מנסה להשתמש בקישור כדי לשלוח הודעות, אבל ניתן להשלים זאת גם באופן מפורש באמצעות חיבור ל-Weave.

פרטים
פרמטרים
[in] aConnection
מצביע ל-WeaveConnection המשמש להשלמת הקישור.
ערכים מוחזרים
WEAVE_NO_ERROR
בהצלחה.
WEAVE_ERROR_INCORRECT_STATE
אם לקישור כבר יש חיבור.
WEAVE_ERROR_INVALID_ARGUMENT
אם החיבור הוא NULL.

סיים

void Finalize(
  void
)

'לא הושלם' לקישור ומשחררים אותו.

לקישורים יכול להיות מצב שדורש ניקוי. למשל, סגירת חיבור, שמטופלת באמצעות השיטה Uncomplete() בנוסף למצב ש פשוט נוקה למצב הראשוני שלו על ידי השיטה Free(). השיטה הזו מפעילה את שניהם, בעיקר מטעמי נוחות.

ראו גם:
סיום(WEAVE_ERROR)

סיים

void Finalize(
  WEAVE_ERROR aErr
)

'לא הושלם' לקישור ומשחררים אותו.

לקישורים יכול להיות מצב שדורש ניקוי. למשל, סגירת חיבור, שמטופלת באמצעות השיטה Uncomplete() בנוסף למצב ש פשוט נוקה למצב הראשוני שלו על ידי השיטה Free(). השיטה הזו מפעילה את שניהם, בעיקר מטעמי נוחות.

פרטים
פרמטרים
[in] aErr
קוד השגיאה מציין את הגורם לבקשה. אם לא WEAVE_NO_ERROR, ייתכן שחיבור ה-TCP יבוטל.
למידע נוסף:
סיום(ביטול)

חינם

void Free(
  void
)

מבטלים את מצב הקישור.

החזרת כל מצב הקישור ללא תנאי למצב המקורי שלו.

GetExchangeCtx

ExchangeContext * GetExchangeCtx(
  WeaveExchangeManager *aExchangeMgr,
  void *aAppState
)

מפיקים אובייקט ExchangeContext מ-Binding.

פרטים
פרמטרים
[in] aExchangeMgr
מצביע אל מנהל ה-Exchange שממנו יש לבקש הקשר.
[in] aAppState
מצביע ריק לאובייקט של מצב אפליקציה, שאותו יאוחסן בהקשר של ה-Exchange לשימוש עתידי.
החזרות
מצביע לאובייקט ExchangeContext או NULL במקרה של כשל.

IncompleteIndication

void IncompleteIndication(
  StatusReport & aReport
)

טפל בכשל של קישור.

השיטה הזו מופעלת, וכתוצאה מכך מפעילה גורמי handler בשכבה גבוהה יותר כשהקישור נכשל אחרי ההשלמה, כלומר אחרי ההפעלה של CompleteConfirm() עם סטטוס שמציין הצלחה.

פרטים
פרמטרים
[in] aReport
הפניה ל-StatusReport, שמתאר מה השתבש.
כדאי לעיין גם במאמר:
CompleteConfirm(StatusReport &aReport).

הפעלה

WEAVE_ERROR Init(
  const uint64_t & aPeerNodeId
)

אפשר להפעיל קישור עם מזהה צומת בלבד.

פעולה זו יוצרת קישור לתעבורת ברירת המחדל שהוגדרה.

פרטים
פרמטרים
[in] aPeerNodeId
הפניה למזהה 64 ביט של היעד המקשר.
ערכים מוחזרים
WEAVE_NO_ERROR
בהצלחה.
WEAVE_ERROR_INVALID_ARGUMENT
אם הקישור לא צוין.

הפעלה

WEAVE_ERROR Init(
  const uint64_t & aPeerNodeId,
  uint8_t aTransport
)

מפעילים אובייקט קישור על סמך מזהה העמיתים וההעברה.

פרטים
פרמטרים
[in] aPeerNodeId
הפניה למזהה הצומת של 64 ביט של יעד הקישור.
[in] aTransport
מפרט ההעברה, מ-WeaveTransportOption.
ערכים מוחזרים
WEAVE_NO_ERROR
בהצלחה.
WEAVE_ERROR_INVALID_ARGUMENT
אם הקישור לא צוין.

הפעלה

WEAVE_ERROR Init(
  const uint64_t & aServiceEpt,
  WeaveServiceManager *aServiceMgr,
  WeaveAuthMode aAuthMode
)

מפעילים אובייקט קישור לנקודת קצה של שירות.

כך מבצעים קישור לנקודת קצה מסוימת בשירות Nest. קישור מהסוג הזה מחייב תהליך השלמה רב-שלבי, שעשוי לכלול אכלוס או עדכון של המטמון של ספריית השירות המקומית. בדרך כלל התהליך הזה מוסתר מהאפליקציה, אבל המשמעות שלו היא שייתכן ששגיאות שיתרחשו בשלב מאוחר יותר בתהליך יועברו, בדרך כלל באמצעות הקריאה החוזרת (callback) הרלוונטית, לאחר – לפעמים זמן רב אחרי – הבקשה המקורית להשתמש בקישור (ולסיים אותו).

פרטים
פרמטרים
[in] aServiceEpt
הפניה למזהה 64 סיביות של נקודת הקצה הרצויה של Weave Service.
[in] aServiceMgr
הפניה למופע של מנהל השירות שבו אפשר להשתמש כדי לחפש רמת שירות ולהתחבר אליה.
[in] aAuthMode
מצב האימות לשימוש בהתחברות.
ערכים מוחזרים
WEAVE_NO_ERROR
בהצלחה.
WEAVE_ERROR_INVALID_ARGUMENT
אם הקישור לא צוין.

הפעלה

WEAVE_ERROR Init(
  WeaveConnection *aConnection
)

מאתחלים אובייקט Binding באמצעות WeaveConnection.

פרטים
פרמטרים
[in] aConnection
מצביע ל-WeaveConnection שישמש כבסיס לקישור.
ערכים מוחזרים
WEAVE_NO_ERROR
בהצלחה.
WEAVE_ERROR_INVALID_ARGUMENT
אם הקישור לא צוין.

IsComplete

bool IsComplete(
  void
)

בודקים אם הקישור הושלם.

פרטים
החזרות
TRUE אם הוא מלא, FALSE אם לא.
ניתן לעיין גם במאמרים הבאים:
CompleteRequest(ProtocolEngine *aEngine)

IsFree

bool IsFree(
  void
)

הבדיקה לא כרוכה בתשלום.

בהקשר הזה, המונח "Free" פירושו "יש מזהה של צומת עמית מוגדר". צריך להתייחס ל-IsFree() כמשמעותה: "אפשר לקרוא לה Free() ולא נעשה בה שימוש מאז".

פרטים
החזרות
'true' אם הקישור הוא חופשי, false אם לא.

UncompleteRequest

void UncompleteRequest(
  void
)

צריך לגרום לקישור להיות חלקי.

בעיקרון, קישור יהיה במצב 'לא גמור' לאחר שהשיטה הזו הופעלה עליו, אבל באופן מתוחכם יותר, צריך לנקות גם כל מצב רלוונטי שלא כלול בקישור עצמו, למשל חיבור TCP. אפליקציות יכולות לשקול להפעיל את UncompleteRequest() כחלק מניקוי השגיאה.

ראו גם:
UncompleteRequest(WEAVE_ERROR )

UncompleteRequest

void UncompleteRequest(
  WEAVE_ERROR aErr
)

צריך לגרום לקישור להיות חלקי.

בעיקרון, קישור יהיה במצב 'לא גמור' לאחר שהשיטה הזו הופעלה עליו, אבל באופן מתוחכם יותר, צריך לנקות גם כל מצב רלוונטי שלא כלול בקישור עצמו, למשל חיבור TCP. אפליקציות יכולות לשקול להפעיל את UncompleteRequest() כחלק מניקוי השגיאה.

פרטים
פרמטרים
[in] aErr
אם לא WEAVE_NO_ERROR, החיבור הקיים, אם קיים, יבוטל במקום להיסגר בחינניות.
למידע נוסף:
UncompleteRequest(void)

~קישור

virtual  ~Binding(
  void
)

ה-Destructor לאובייקטים מקשרים.

ניקוי כל המצב הפנימי ובנוסף, אם צריך, סוגר חיבורים פתוחים.