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 プロトコルのイニシエータ側を実装します。ICMP ping プロトコルと同様に、Weave Echo プロトコルを使用して、Weave ノードのライブネスとネットワーク到達性をテストできます。

アプリケーションは WeaveEchoClient クラスを使用して、Binding オブジェクトによって識別されるピアノードに 1 回限りのメッセージまたは繰り返しの EchoRequest メッセージを送信できます。エコー リクエストに応答するクラスが存在します(WeaveEchoServer を参照)。

クライアント バインディング

WeaveEchoClient は Weave Binding オブジェクトを受け取ります。このオブジェクトは、エコー リクエストの対象とする受信者を識別し、それとの通信を確立するために使用されます。Binding は、WeaveEchoClient オブジェクトの初期化前に、アプリケーションで構成と準備を行うか、準備せずにそのままの状態にすることができます。その場合は、WeaveEchoClient がバインディングのオンデマンド準備をリクエストします(詳細については Binding::RequestPrepare() をご覧ください)。

Ready 状態になった後に失敗した場合は、Binding のオンデマンドの準備もリクエストされます。

SendRepeating モード

SendRepeating() メソッドを使用して WeaveEchoClient を SendRepeating モードに設定できます。このモードでは、クライアント オブジェクトは設定された間隔で、EchoRequest メッセージの繰り返しシーケンスをピアに送信します。SendRepeating モードをキャンセルするには、Stop() メソッドを呼び出します。

マルチキャストとブロードキャスト

WeaveEchoClient オブジェクトを使用すると、適切な IPv6 マルチキャスト アドレスまたは IPv4 ローカル ネットワーク ブロードキャスト アドレス(255.255.255.255)を使用して Binding オブジェクトを構成することで、複数の受信者に EchoRequest を同時に送信できます。WeaveEchoClient オブジェクトは、マルチキャストまたはブロードキャスト ピアのアドレスを検出すると、EchoRequest の送信時に自動的にマルチレスポンス モードに入ります。

このモードでは、オブジェクトは引き続き同じエクスチェンジに到着するすべての受信 EchoResponse メッセージをリッスンして配信します。オブジェクトは、1)アプリが Stop() または Send() を呼び出す、2)SendRepeating モードになる、別のリクエストを送信するタイミングになる、3)レスポンスを受信せずに受信タイムアウトが期限切れになるまで、MultiResponse モードのままになります。

API イベント

オペレーションの過程で、WeaveEchoClient オブジェクトはアプリケーションを呼び出し、特定のアクションをリクエストしたり、重要なイベントの通知を配信したりします。これらの API イベント呼び出しは、クライアント オブジェクトで現在構成されているコールバック関数に対して行われます。特に明記されていない限り、アプリケーションはイベント コールバック中にクライアントの状態を自由に変更できます。全体的な例外の 1 つはオブジェクトの Shutdown() メソッドです。このメソッドはコールバック中に呼び出されることはありません。

以下の API イベントが定義されています。

PreparePayload

WeaveEchoClient が EchoRequest メッセージを形成し、アプリケーションにペイロードの提供をリクエストしています。必要に応じて、ペイロード データを含む新しい PacketBuffer を返せます。アプリケーションがこのイベントを処理しない場合、長さがゼロのペイロードを持つ EchoRequest が自動的に送信されます。アプリは、このコールバック中に WeaveEchoClient の状態を変更してはなりません。

RequestSent

EchoRequest メッセージがピアに送信されました。

ResponseReceived

ピアから EchoResponse メッセージを受信しました。イベントの引数には、レスポンス ペイロードと、レスポンス メッセージに関するメタ情報が含まれます。

CommunicationError

EchoRequest の作成中または送信中、または応答の待機中にエラーが発生しました。レスポンスの待機中に発生する可能性のあるエラーには、重要なエラーや接続の予期せぬ終了などがあります。イベントの引数にエラーの理由が含まれます。

ResponseTimeout

割り当てられた時間内に EchoResponse を受信できませんでした。レスポンスのタイムアウトは、Binding オブジェクトの DefaultResponseTimeout プロパティで制御されます。

RequestAborted

前のメッセージに対する応答を受信する前に、別の EchoRequest を送信するリクエストが送信されたため、進行中の Echo 交換が中止されました。これは、次の EchoRequest を送信する時間に達すると、SendRepeating モードで発生します。また、EchoRequest の送信後、レスポンスを受信する前にアプリで Send() が呼び出された場合にも発生することがあります。

オブジェクトがマルチレスポンス モードの場合、少なくとも 1 つの 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
}
enum
State{
  kState_NotInitialized = 0,
  kState_Idle = 1,
  kState_PreparingBinding = 2,
  kState_RequestInProgress = 3,
  kState_WaitingToSend = 4
}
enum

パブリック属性

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
進行中の Echo 交換を停止し、送信反復モードをキャンセルします。

静的パブリック関数

DefaultEventHandler(void *appState, EventType eventType, const InEventParam & inParam, OutEventParam & outParam)
void
WeaveEchoClient API イベントのデフォルト ハンドラ。

構造体

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 オブジェクトを初期化します。

詳細
パラメータ
[in] binding
ピアノードとの通信を確立するために使用される Binding オブジェクト。
[in] eventCallback
API イベントをアプリケーションに配信するために WeaveEchoClient オブジェクトによって呼び出される関数へのポインタ。
[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 オブジェクトが Ready 状態でない場合、Binding::RequestPrepare() メソッドにリクエストが実行され、オンデマンドの準備が開始されます。送信オペレーションはこのプロセスが完了するまでキューに入れられます。このキューの最大深度は 1 です。つまり、キューに前の送信があるときに Send() を呼び出すと、EchoRequest が 1 つだけ送信されます。

WeaveEchoClient が送信リピート モードのときに(つまり、SendRepeating() を前の呼び出しが行われたため)Send() を呼び出すと、送信サイクルの高速化とリセットの効果はありますが、WeaveEchoClient の送信繰り返しモードは解除されません。

送信

WEAVE_ERROR Send(
  PacketBuffer *payloadBuf
)

特定のペイロードを含む EchoRequest メッセージをピアに送信します。

このメソッドは、EchoRequest メッセージをピアノードに送信するプロセスを開始します。提供されたペイロード バッファの内容は、EchoRequest メッセージのペイロードとしてピアに送信されます。対応する EchoResponse メッセージを受信すると、ResponseReceived API イベントを介してアプリケーションに配信されます。

このメソッドを呼び出すと、提供されたペイロード バッファの所有権が WeaveEchoClient オブジェクトに渡され、このオブジェクトがそれを解放します。これは、メソッドが正常に完了したか、エラーが発生したかにかかわらず当てはまります。

このメソッドが呼び出されたときに Binding オブジェクトが Ready 状態でない場合、Binding::RequestPrepare() メソッドにリクエストが実行され、オンデマンドの準備が開始されます。送信オペレーションはこのプロセスが完了するまでキューに追加されます。このキューの最大深度は 1 です。つまり、キューに前の送信があるときに Send() を呼び出すと、EchoRequest が 1 つだけ送信されます。

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() が呼び出された時点、または SendRepeating() が呼び出された後に Binding が準備完了になった時点で行われます(以下を参照)。その後の送信は、指定した間隔で行われます。

送信が発生するたびに、WeaveEchoClient が PreparePayload API イベントを介してアプリケーションにリクエストを行い、メッセージのペイロードを準備します。

Binding オブジェクトがメッセージ送信時の Ready 状態でない場合、Binding::RequestPrepare() メソッドにリクエストが実行され、オンデマンドの準備が開始されます。このプロセスが完了するまで、それ以上の繰り返しメッセージの送信は一時停止されます。オンデマンドのバインディングの準備中にエラーが発生すると、WeaveEchoClient が送信反復モードを終了します。

SetEventCallback

void SetEventCallback(
  EventCallback eventCallback
)

WeaveEchoClient オブジェクトに API イベント コールバック関数を設定します。

シャットダウン

void Shutdown(
  void
)

以前に初期化した WeaveEchoClient オブジェクトをシャットダウンします。

このメソッドは、以前に Init() メソッドを呼び出している場合にのみ呼び出すことができます。

停止

void Stop(
  void
)

進行中の Echo 交換を停止し、送信反復モードをキャンセルします。

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
イベント コールバックによって渡される出力イベント パラメータの参照