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() をご覧ください)。

「準備完了」状態になった後でバインディングが失敗した場合は、バインディングのオンデマンド準備もリクエストされます。

繰り返しモードを送信する

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

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

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

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

API イベント

WeaveEchoClient オブジェクトは、その操作中にアプリケーションに呼び出して、特定の操作をリクエストしたり、重要なイベントの通知を送信したりします。これらの API イベント呼び出しは、クライアント オブジェクトに現在構成されているコールバック関数に対して行われます。特に記載のない限り、アプリケーションはイベント コールバック中にクライアントの状態を自由に変更できます。全体的な例外として、オブジェクトの 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() を呼び出した場合にも、この問題が発生します。

オブジェクトが MultiResponse モードのとき、少なくとも 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() メソッドにリクエストが送信されます。このプロセスが完了するまで、以降の繰り返しのメッセージ送信は一時停止されます。オンデマンドの Binding の準備中にエラーが発生すると、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
イベント コールバックによって渡される出力イベント パラメータの参照