nlib
nn::nlib::msgpack::jsonrpc::JsonRpcClient クラスfinal

JSON-RPCのクライアント側の管理を行うクラスです。 [詳解]

#include "nn/nlib/msgpack/jsonrpc/JsonRpcClient.h"

公開型

typedef void(* NoTargetResponseHandler) (UniquePtr< JsonRpcResponse > &rhs)
 振り分けることができなかったレスポンスが発生した場合に呼び出さる関数の型です。 [詳解]
 
typedef ::nlib_ns::threading::Future< UniquePtr< JsonRpcResponse > > FutureType
 それぞれにリクエストに対して割り当てられる、レスポンス(又はタイムアウト)があるとセットされるfutureの型です。
 

公開メンバ関数

 JsonRpcClient ()
 デフォルトコンストラクタです。
 
 JsonRpcClient (const JsonRpcClient &rhs)
 コピーコンストラクタです。 [詳解]
 
JsonRpcClientoperator= (const JsonRpcClient &rhs)
 代入演算子です。
 
void swap (JsonRpcClient &rhs)
 スワップです。 [詳解]
 
reqid_t GenerateId ()
 JSON-RPCのリクエストに記述するIDを作成して返します。 [詳解]
 
errno_t GetFutureForId (FutureType *future, reqid_t reqid)
 リクエストIDに対応するfutureを取得します。 [詳解]
 
errno_t ResolveResponse (const void *buf, size_t nbytes)
 レスポンスのデータを受け取り、対応するfutureを有効にします。 [詳解]
 
errno_t Abort (reqid_t reqid)
 リクエストに対するレスポンスの受信を中止します。 [詳解]
 
errno_t SetNoTargetResponseHandler (NoTargetResponseHandler handler)
 振り分けることができなかったレスポンスが発生した場合に呼び出さる関数を設定します。 [詳解]
 
bool operator== (const JsonRpcClient &rhs) const
 クライアントが同一の場合にtrueを返します。
 
bool operator!= (const JsonRpcClient &rhs) const
 クライアントが同一の場合にfalseを返します。
 
 operator bool () const
 クライアントが有効な場合にtrueを返します。
 

静的公開メンバ関数

static JsonRpcClient OpenClient (const char *name)
 クライアントをオープンします。存在しない場合は作成します。 [詳解]
 
static JsonRpcClient SearchClient (const char *name)
 オープンされたクライアントを探して返します。 [詳解]
 
static void CloseClient (const JsonRpcClient &client)
 指定されたJsonRpcClientをクローズします。 [詳解]
 
static void Shutdown ()
 JsonRpcClientを全てクローズし、利用を終了します。
 

詳解

JSON-RPCのクライアント側の管理を行うクラスです。

説明
以下のようなことを行います。
  • GenerateId()でリクエストに付与するIDを生成する。
  • レスポンスが到着した場合に有効になるfutureを作成する。
  • サーバーからのレスポンスを振り分ける。

JsonRpcClient.h24 行目に定義があります。

型定義メンバ詳解

void(* nn::nlib::msgpack::jsonrpc::JsonRpcClient::NoTargetResponseHandler)(UniquePtr< JsonRpcResponse > &rhs)

振り分けることができなかったレスポンスが発生した場合に呼び出さる関数の型です。

説明
SetNoTargetResponseHandler()で設定します。

JsonRpcClient.h32 行目に定義があります。

構築子と解体子

nn::nlib::msgpack::jsonrpc::JsonRpcClient::JsonRpcClient ( const JsonRpcClient rhs)
inline

コピーコンストラクタです。

引数
[in]rhsクライアントオブジェクト

JsonRpcClient.h34 行目に定義があります。

関数詳解

nn::nlib::msgpack::jsonrpc::JsonRpcClient::Abort ( reqid_t  reqid)

リクエストに対するレスポンスの受信を中止します。

引数
[in]reqidリクエストのID
戻り値
0成功した場合
ESRCHクライアントが有効でない場合
説明
リクエストはJsonRpcResponse::CLIENT_ABORTのエラーコードをレスポンスとして返して中断されます。
nn::nlib::msgpack::jsonrpc::JsonRpcClient::CloseClient ( const JsonRpcClient client)
static

指定されたJsonRpcClientをクローズします。

引数
[in]clientクライアントオブジェクト
説明
JsonRpcClientが管理する返事待ちのリクエストに対しては、JsonRpcResponse::CLIENT_ABORTのエラーコードをレスポンスとして返して中断されます。
nn::nlib::msgpack::jsonrpc::JsonRpcClient::GenerateId ( )

JSON-RPCのリクエストに記述するIDを作成して返します。

戻り値
0以外のユニークなIDを返します。
nn::nlib::msgpack::jsonrpc::JsonRpcClient::GetFutureForId ( FutureType future,
reqid_t  reqid 
)

リクエストIDに対応するfutureを取得します。

引数
[out]futureリクエストに対応するレスポンスが来ると有効になるfutureが格納されるポインタ
[in]reqidリクエストのID
戻り値
0成功した場合
ESRCHクライアントが有効でない場合
ENOMEMメモリが足りない場合
nn::nlib::msgpack::jsonrpc::JsonRpcClient::OpenClient ( const char *  name)
static

クライアントをオープンします。存在しない場合は作成します。

引数
[in]nameクライアント名
戻り値
クライアントオブジェクト
説明
多くの場合、サーバー毎に1つのJsonRpcClientオブジェクトを作成することになります。
以下がコード例です。
if (!myClient) { エラー }
nn::nlib::msgpack::jsonrpc::JsonRpcClient::ResolveResponse ( const void *  buf,
size_t  nbytes 
)

レスポンスのデータを受け取り、対応するfutureを有効にします。

引数
[in]bufレスポンスデータへのポインタ
[in]nbytesレスポンスのサイズ
戻り値
0成功した場合
EINVALbufNULLであるか、nBytes が0である場合
ESRCHクライアントが有効でない場合
ENOMEMメモリが足りない場合
EILSEQレスポンスデータを解釈できなかった場合
説明
サーバーから(ユーザーが決定した)何らかの伝送経路から受け取ったレスポンスを適切に振り分けて、対応するfutureを有効にします。
この関数はユーザーコードから呼び出す必要があることに注意してください。 また、レスポンスデータは単一で完結している必要があります。
nn::nlib::msgpack::jsonrpc::JsonRpcClient::SearchClient ( const char *  name)
static

オープンされたクライアントを探して返します。

引数
[in]nameクライアント名
戻り値
クライアントオブジェクト
nn::nlib::msgpack::jsonrpc::JsonRpcClient::SetNoTargetResponseHandler ( NoTargetResponseHandler  handler)

振り分けることができなかったレスポンスが発生した場合に呼び出さる関数を設定します。

引数
[in]handlerハンドラ
戻り値
0成功した場合
説明
タイムアウト後やAbort()した場合等にレスポンスが帰ってきた場合などは、レスポンスに対してfutureを有効にすることができません。
そのような場合にhandler が呼び出され、レスポンスを処理することができます。
nn::nlib::msgpack::jsonrpc::JsonRpcClient::swap ( JsonRpcClient rhs)
inline

スワップです。

引数
[in]rhsクライアントオブジェクト

JsonRpcClient.h39 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: