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 通訊協定與 ICMP 連線偵測 (ping) 通訊協定類似,可用於測試 Weave 節點的有效性和可連性。

應用程式可以使用 WeaveEchoClient 類別,將一次性或重複的 EchoRequest 訊息傳送至 Binding 物件識別的對等節點。存在用來回應 echo 要求的對應類別 (請參閱「WeaveEchoServer」)。

用戶端繫結

WeaveEchoClient 使用 Weave Binding 物件,以識別及建立與 echo 要求之收件者之間的通訊。應用程式可以在初始化 WeaveEchoClient 物件前設定 Binding 及準備該物件,也可以將其保持為不準備。在這種情況下,WeaveEchoClient 將要求隨選準備繫結 (詳情請參閱 Binding::RequestPrepare())。

以及要求在進入「就緒」狀態後失敗的繫結要求。

傳送重複模式

您可以使用 SendRepeating() 方法將 WeaveEchoClient 設為 SendRepeating 模式。在此模式下,用戶端物件會以設定的時間間隔,將一連串的 EchoRequest 訊息傳送給對等點。呼叫 Stop() 方法可以取消 SendRepeating 模式。

多點傳播和廣播

您可以透過 WeaveEchoClient 物件,使用適當的 IPv6 多點傳送位址或 IPv4 區域網路廣播位址 (255.255.255.255) 設定 Binding 物件,讓多個收件者同時傳送 EchoRequests。當 WeaveEchoClient 物件偵測到多點傳送或廣播對等位址時,就會在傳送 EchoRequest 時自動進入 MultiResponse 模式。

在此模式下,物件會繼續監聽並傳送在同一次交換庫收到的所有傳入 EchoResponse 訊息。物件會保持在多重回應模式,直到:1) 應用程式在 SendRepeating 模式下呼叫 Stop()Send()、2) 傳送另一個要求的時間,或 3) 未收到回應,且接收逾時到期。

API 事件

在作業的過程中,WeaveEchoClient 物件會呼叫應用程式,以要求特定動作或傳送重要事件通知。這些 API 事件呼叫會對用戶端物件目前設定的回呼函式發出。除非另有註明,否則應用程式可以在事件回呼期間自由變更用戶端狀態。有一個整體例外狀況是物件的 Shutdown() 方法,這個方法可能不會在回呼期間呼叫。

定義的 API 事件如下:

PreparePayload

WeaveEchoClient 即將形成 EchoRequest 訊息,並要求應用程式提供酬載。如果應用程式需要,可能會傳回包含有效負載資料的新 PacketBuffer。如果應用程式無法處理此事件,系統會自動傳送酬載長度為零的 EchoRequest。在此回呼期間,應用程式「不得」變更 WeaveEchoClient 的狀態。

RequestSent

系統已將 EchoRequest 訊息傳送給通訊對象。

ResponseReceived

對等人收到了一封 EchoResponse 訊息。事件的引數包含回應酬載和回應訊息的中繼資訊。

CommunicationError

表單建立或傳送 EchoRequest 時發生錯誤,或正在等候回應。等待回應時發生的錯誤,例如重大錯誤或未預期關閉的連線。事件的引數包含錯誤原因。

ResponseTimeout

未在指定時間內收到 EchoResponse。回應逾時是由 Binding 物件的 DefaultResponseTimeout 屬性控制。

RequestAborted

系統已取消進行中的 Echo 交換作業,因為對方要求在收到回覆前一則訊息前,已要求傳送另一個 EchoRequest。當抵達時傳送下一個 EchoRequest 時,這可能會發生在 SendRepeating 模式時發生。如果應用程式在傳送 EchoRequest 之後、尚未收到任何回應之前呼叫 Send(),也可能會發生這種情況。

物件處於 MultiResponse 模式時,如果收到至少一則 EchoResponse 訊息,則會隱藏事件。

建構函式和解構函式

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
}
列舉
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
列舉

公開屬性

AppState
void *
應用程式專屬資料的指標。

公開函式

GetBinding(void) const
傳回與 WeaveEchoClient 相關聯的 Binding 物件指標。
GetEventCallback(void) const
EventCallback
傳回目前在 WeaveEchoClient 物件上設定的 API 事件回呼函式的指標。
GetState(void) const
擷取 WeaveEchoClient 物件目前的狀態。
Init(Binding *binding, EventCallback eventCallback, void *appState)
初始化 WeaveEchoClient 物件。
IsSendRrepeating() const
bool
如果 WeaveEchoClient 物件目前處於傳送重複模式,則傳回 true。
RequestInProgress() const
bool
如果已傳送 EchoRequest,且 WeaveEchoClient 物件正在等待回應,則會傳回 true。
Send(void)
傳送 EchoRequest 訊息給邀請對象。
Send(PacketBuffer *payloadBuf)
傳送 EchoRequest 訊息給具有特定酬載的對等點。
SendRepeating(uint32_t sendIntervalMS)
開始傳送一連串的 EchoRequest 訊息給對等端。
SetEventCallback(EventCallback eventCallback)
void
設定 WeaveEchoClient 物件上的 API 事件回呼函式。
Shutdown(void)
void
關閉之前初始化的 WeaveEchoClient 物件。
Stop(void)
void
停止任何進行中的回音交換作業,並取消傳送重複模式。

公開的靜態函式

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
WeaveEchoClient API 事件的預設處理常式。

Structs

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

應用程式要求為 Echo 要求準備酬載。

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 

傳回與 WeaveEchoClient 相關聯的 Binding 物件指標。

GetEventCallback

EventCallback GetEventCallback(
  void
) const 

傳回目前在 WeaveEchoClient 物件上設定的 API 事件回呼函式的指標。

GetState

State GetState(
  void
) const 

擷取 WeaveEchoClient 物件目前的狀態。

Init

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

初始化 WeaveEchoClient 物件。

請初始化 WeaveEchoClient 物件,以便將 echo 訊息傳送給對等互連。

詳細資料
參數
[in] binding
用來與對等節點建立通訊的繫結物件。
[in] eventCallback
WeaveEchoClient 物件呼叫的函式指標,用於將 API 事件提供給應用程式。
[in] appState
指向應用程式定義物件的指標,該物件會在發生 API 事件時傳回應用程式。

IsSendRrepeating

bool IsSendRrepeating() const 

如果 WeaveEchoClient 物件目前處於傳送重複模式,則傳回 true。

RequestInProgress

bool RequestInProgress() const 

如果已傳送 EchoRequest,且 WeaveEchoClient 物件正在等待回應,則會傳回 true。

傳送

WEAVE_ERROR Send(
  void
)

傳送 EchoRequest 訊息給邀請對象。

這個方法會啟動將 EchoRequest 訊息傳送至對等節點的程序。如果收到相對應的 EchoResponse 訊息,就會透過 ResponseReceived API 事件將訊息傳送至應用程式。

建立 EchoRequest 訊息時,WeaveEchoClient 會透過 PreparePayload API 事件向應用程式發出要求,準備訊息的酬載。

呼叫此方法時,如果 Binding 物件不在「就緒」狀態中,則將要求傳送至 Binding::RequestPrepare() 方法,啟動隨選準備作業。接著,傳送作業會排入佇列,直到這個程序完成為止。此佇列的最大深度為 1。因此,如果佇列中已有傳送一次並呼叫 Send(),系統只會傳送一個 EchoRequest。

WeaveEchoClient 處於傳送重複模式時 (即先前的呼叫 SendRepeating()),呼叫 Send() 能夠加速及重設傳送週期,但並不會讓 WeaveEchoClient 離開傳送回覆模式。

傳送

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

傳送 EchoRequest 訊息給具有特定酬載的對等點。

這個方法會啟動將 EchoRequest 訊息傳送至對等節點的程序。系統會將所提供酬載緩衝區的內容做為 EchoRequest 訊息的酬載傳送給對等點。如果收到相對應的 EchoResponse 訊息,就會透過 ResponseReceived API 事件將訊息傳送至應用程式。

呼叫此方法時,所提供酬載緩衝區的擁有權會傳遞給 WeaveEchoClient 物件,由該物件負責釋放。無論方法是否成功完成或發生錯誤,皆有效。

呼叫此方法時,如果 Binding 物件不在「就緒」狀態中,則將要求傳送至 Binding::RequestPrepare() 方法,啟動隨選準備作業。接著,傳送作業會排入佇列,直到這個程序完成為止。此佇列的最大深度為 1。因此,如果佇列中已有傳送一次並呼叫 Send(),系統只會傳送一個 EchoRequest。

WeaveEchoClient 處於傳送重複模式時 (即先前的呼叫 SendRepeating()),呼叫 Send() 能夠加速及重設傳送週期,但並不會讓 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() 方法發出要求,進行隨選準備。在這個程序完成前,系統會暫停再次傳送訊息。隨選繫結準備期間失敗,會導致 WeaveEchoClient 退出傳送重複模式。

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

設定 WeaveEchoClient 物件上的 API 事件回呼函式。

關閉

void Shutdown(
  void
)

關閉之前初始化的 WeaveEchoClient 物件。

請注意,只有在之前呼叫了 Init() 方法時,才能呼叫這個方法。

停止

void Stop(
  void
)

停止任何進行中的回音交換作業,並取消傳送重複模式。

WeaveEchoClient

 WeaveEchoClient(
  void
)

公開的靜態函式

DefaultEventHandler

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

WeaveEchoClient API 事件的預設處理常式。

應用程式必須針對應用程式無法識別或處理的任何 API 事件呼叫這個方法。提供的參數必須與用戶端物件傳遞至應用程式事件處理常式函式的參數相同。

詳細資料
參數
[in] appState
指向與用戶端物件相關聯的應用程式定義狀態資訊的指標。
[in] eventType
事件回呼傳遞的事件 ID
[in] inParam
事件回呼傳遞的輸入事件參數參照
[in] outParam
事件回呼傳遞的輸出事件參數參照