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

JSON-RPCのリクエストをシリアライズしてメモリに書きこむためのクラスです。 [詳解]

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

公開メンバ関数

 JsonRpcRequestWriter (bool use_msgpack) noexcept
 trueにすることでJSONの記述方式にJSONではなくmsgpackを利用します。 [詳解]
 
errno_t BeginWriteRequest (uint32_t n) noexcept
 JSON-RPCのリクエストを書きこむ前に1回呼び出します。 [詳解]
 
errno_t WriteRequest (const char *method, reqid_t id, const MpObject &params) noexcept
 JSON-RPCのリクエストを書き込みます。 [詳解]
 
errno_t WriteRequest (const char *method, reqid_t id) noexcept
 パラメータを省略したJSON-RPCのリクエストを書き込みます。
 
errno_t WriteNotification (const char *method, const MpObject &params) noexcept
 JSON-RPCのNotificationを書き込みます。 [詳解]
 
errno_t WriteNotification (const char *method) noexcept
 パラメータを省略したJSON-RPCのNotificationを書き込みます。
 
errno_t WriteRequest (const JsonRpcRequest &req) noexcept
 JSON-RPCのリクエストを書き込みます。 [詳解]
 
errno_t EndWriteRequest (UniquePtrType *ptr, size_t *n) noexcept
 JSON-RPCリクエストの書き込みを完了します。 [詳解]
 
std::tuple< errno_t, UniquePtrType, size_t > EndWriteRequest () noexcept
 JSON-RPCリクエストの書き込みを完了して、エラー値とバイト列とバイト列のサイズのタプルを返します。 [詳解]
 
コンストラクタ、デストラクタ、及び初期化
constexpr JsonRpcRequestWriter () noexcept
 デフォルトコンストラクタです。
 
 ~JsonRpcRequestWriter () noexcept
 デストラクタです。
 
 JsonRpcRequestWriter (JsonRpcRequestWriter &&rhs) noexcept
 ムーブコンストラクタです。
 
JsonRpcRequestWriteroperator= (JsonRpcRequestWriter &&rhs) noexcept
 ムーブ代入演算子です。
 

詳解

JSON-RPCのリクエストをシリアライズしてメモリに書きこむためのクラスです。

説明
クライアント側でJSON-RPCリクエストとなるバイト列を作成するために利用されるクラスです。
JsonRpcRequestで作成したJSON-RPCリクエストをシリアライズしてサーバーに送信できるバイト列に変換します。
実際のデータ送信(と受信)はユーザーが記述する必要があります。
単体リクエストとバッチリクエストの両方を作成することが可能です。
単一のリクエストを送信する場合は以下のようなコードになります。
SUCCEED_IF(w.BeginWriteRequest(1) == 0);
// http://www.jsonrpc.org/specification#examples
JsonRpcRequest req;
req.SetId(reqid); // reqid from JsonRpcClient
req.SetMethod("subtract");
auto params = ToMpObject(R"([42,23])");
req.MoveParamsFrom(std::move(*params));
w.WriteRequest(req);
auto result = w.EndWriteRequest();
SUCCEED_IF(std::get<0>(result) == 0);
// makes null terminated string and print it
size_t bufsize = std::get<2>(result);
memcpy(tmp, std::get<1>(result).get(), bufsize);
tmp[bufsize] = '\0';
nlib_printf("%s\n", tmp);
/*
Output:
{"id":1,"method":"subtract","params":[42,23],"jsonrpc":"2.0"}
*/
バッチリクエストを送信する場合は、BeginWriteRequest()にリクエストの数を設定し、複数のWriteRequest()を実行します。

JsonRpcRequest.h84 行目に定義があります。

構築子と解体子

◆ JsonRpcRequestWriter()

nn::nlib::msgpack::jsonrpc::JsonRpcRequestWriter::JsonRpcRequestWriter ( bool  use_msgpack)
inlineexplicitnoexcept

trueにすることでJSONの記述方式にJSONではなくmsgpackを利用します。

引数
[in]use_msgpacktrueならばmsgpackを利用
説明
nlibのJSON-RPCサーバーはmsgpackのリクエストを処理することが可能で、この場合、レスポンスもmsgpack形式でクライアントに送信するようになります。

JsonRpcRequest.h112 行目に定義があります。

関数詳解

◆ BeginWriteRequest()

nn::nlib::msgpack::jsonrpc::JsonRpcRequestWriter::BeginWriteRequest ( uint32_t  n)
noexcept

JSON-RPCのリクエストを書きこむ前に1回呼び出します。

引数
[in]n書きこむリクエストの数(n >= 2でバッチリクエストになる)
戻り値
0成功しました。
ENOMEMメモリの確保に失敗した場合

◆ EndWriteRequest() [1/2]

nn::nlib::msgpack::jsonrpc::JsonRpcRequestWriter::EndWriteRequest ( UniquePtrType ptr,
size_t *  n 
)
noexcept

JSON-RPCリクエストの書き込みを完了します。

引数
[out]ptrバイト列が格納されるポインタ
[out]nデータのバイト数が書き込まれるポインタ
戻り値
0成功しました。
EINVALptr またはn がNULLの場合
ERANGEリクエストの個数がBeginWriteRequest()で指定した数と一致しない場合
ENOMEMメモリの確保に失敗した場合
説明
成功すると、ptrnバイトのデータが設定されます。 このデータをサーバーに送信することでクライアント側からのJSON-RPCの呼び出しが完了します。

◆ EndWriteRequest() [2/2]

nn::nlib::msgpack::jsonrpc::JsonRpcRequestWriter::EndWriteRequest ( )
noexcept

JSON-RPCリクエストの書き込みを完了して、エラー値とバイト列とバイト列のサイズのタプルを返します。

戻り値
0,buf,bufsize成功した場合
ERANGE,nullptr,0リクエストの個数がBeginWriteRequest()で指定した数と一致しない場合
ENOMEM,nullptr,0メモリの確保に失敗した場合
説明
返されたバイト列をサーバーに送信することでクライアント側からのJSON-RPCの呼び出しが完了します。 エラー値が0の場合のみタプル内のバイト列やバイト列のサイズは有効です。

◆ WriteNotification()

nn::nlib::msgpack::jsonrpc::JsonRpcRequestWriter::WriteNotification ( const char *  method,
const MpObject params 
)
inlinenoexcept

JSON-RPCのNotificationを書き込みます。

引数
[in]methodメソッド名
[in]paramsパラメータ
戻り値
0ならば成功
説明
以下のコードと等価です。
this->WriteRequest(method, 0, params);

JsonRpcRequest.h120 行目に定義があります。

◆ WriteRequest() [1/2]

nn::nlib::msgpack::jsonrpc::JsonRpcRequestWriter::WriteRequest ( const char *  method,
reqid_t  id,
const MpObject params 
)
noexcept

JSON-RPCのリクエストを書き込みます。

引数
[in]methodメソッド名
[in]idリクエストのID
[in]paramsパラメータ
戻り値
0成功しました。
EINVALmethodNULLか空文字列の場合
ERANGEリクエストの個数がBeginWriteRequest()で指定した数を超えた場合
ENOMEMメモリの確保に失敗した場合
その他JSON/msgpackの書き込みに失敗した際にエラーが発生した場合

◆ WriteRequest() [2/2]

nn::nlib::msgpack::jsonrpc::JsonRpcRequestWriter::WriteRequest ( const JsonRpcRequest req)
inlinenoexcept

JSON-RPCのリクエストを書き込みます。

引数
[in]reqJSON-RPCリクエスト
戻り値
0ならば成功。
説明
以下のコードと等価です。
this->WriteRequest(req.GetMethod(), req.GetId(), req.GetParams());

JsonRpcRequest.h127 行目に定義があります。


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