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)
|
typedefvoid(*
|
EventType{
|
列舉 |
State{
|
列舉 |
公開屬性 |
|
---|---|
AppState
|
void *
應用程式專屬資料的指標。
|
公開函式 |
|
---|---|
GetBinding(void) const
|
Binding *
傳回與 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:: |
在 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
|
應用程式要求為 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
應用程式專屬資料的指標。
公開函式
GetEventCallback
EventCallback GetEventCallback( void ) const
傳回目前在 WeaveEchoClient 物件上設定的 API 事件回呼函式的指標。
Init
WEAVE_ERROR Init( Binding *binding, EventCallback eventCallback, void *appState )
初始化 WeaveEchoClient 物件。
請初始化 WeaveEchoClient 物件,以便將 echo 訊息傳送給對等互連。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
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 離開傳送回覆模式。
詳細資料 | |||
---|---|---|---|
參數 |
|
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 Stop( void )
停止任何進行中的回音交換作業,並取消傳送重複模式。
WeaveEchoClient
WeaveEchoClient( void )
公開的靜態函式
DefaultEventHandler
void DefaultEventHandler( void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam )
WeaveEchoClient API 事件的預設處理常式。
應用程式必須針對應用程式無法識別或處理的任何 API 事件呼叫這個方法。提供的參數必須與用戶端物件傳遞至應用程式事件處理常式函式的參數相同。
詳細資料 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|