nlib
JsonRpcRequest.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_MSGPACK_JSONRPC_JSONRPCREQUEST_H_
4 #define INCLUDE_NN_NLIB_MSGPACK_JSONRPC_JSONRPCREQUEST_H_
5 
6 #include <iterator>
7 
8 #include "nn/nlib/Config.h"
9 #include "nn/nlib/UniquePtr.h"
10 #include "nn/nlib/Nlist.h"
14 
15 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
16 #undef NLIB_VIS_PUBLIC
17 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
18 #endif
19 
20 NLIB_NAMESPACE_BEGIN
21 namespace msgpack {
22 namespace jsonrpc {
23 
24 namespace fortest {
25 class JsonRpcErrorRequestTest;
26 } // namespace fortest
27 
28 typedef uint32_t reqid_t;
29 
31  public:
32  // NOTE:
33  // If id_ is 0, the request becomes notification(ID is not sent.).
34  JsonRpcRequest() NLIB_NOEXCEPT : id_(0), method_(NULL) {}
36  reqid_t GetId() const NLIB_NOEXCEPT { return id_; }
37  const char* GetMethod() const NLIB_NOEXCEPT { return method_; }
38  const MpObject& GetParams() const NLIB_NOEXCEPT { return params_; }
39  MpObject& GetParams() NLIB_NOEXCEPT { return params_; }
40 
41  void SetId(reqid_t id) NLIB_NOEXCEPT { id_ = id; }
42  bool SetMethod(const char* method) NLIB_NOEXCEPT;
43  void MoveParamsFrom(MpObject& params) NLIB_NOEXCEPT { // NOLINT
44  MpObject tmp;
45  tmp.swap(params);
46  tmp.swap(params_);
47  }
48 
49  private:
50  NLIB_VIS_HIDDEN JsonRpcResponse& GetResponse() NLIB_NOEXCEPT { return response_; }
51  NLIB_VIS_HIDDEN bool SetMethodRaw(const void* p, size_t n) NLIB_NOEXCEPT;
53 
54  private:
55  reqid_t id_;
56  char* method_;
57  MpObject params_;
58  JsonRpcResponse response_;
59 
60  friend NLIB_VIS_PUBLIC size_t JsonRpcServerExec(const void* p, size_t n,
62  friend class JsonRpcRequestReader;
63  friend class fortest::JsonRpcErrorRequestTest;
65 };
66 
68  public:
69  JsonRpcRequestWriter() NLIB_NOEXCEPT : prv_(NULL), is_msgpack_(false) {}
71  explicit JsonRpcRequestWriter(bool use_msgpack) NLIB_NOEXCEPT
72  : prv_(NULL), is_msgpack_(use_msgpack) {}
73  errno_t BeginWriteRequest(uint32_t n) NLIB_NOEXCEPT;
74  errno_t WriteRequest(const char* method, reqid_t id, const MpObject& params) NLIB_NOEXCEPT;
75  errno_t WriteNotification(const char* method, const MpObject& params) NLIB_NOEXCEPT {
76  return WriteRequest(method, 0, params);
77  }
78  errno_t WriteRequest(const JsonRpcRequest& req) NLIB_NOEXCEPT {
79  return WriteRequest(req.GetMethod(), req.GetId(), req.GetParams());
80  }
81  errno_t EndWriteRequest(ReallocOutputStream::UniquePtrType* ptr, size_t* n) NLIB_NOEXCEPT;
82 
83  private:
84  struct JsonRpcRequestWriterPrivate;
85  JsonRpcRequestWriterPrivate* prv_;
86  bool is_msgpack_;
87 
89 };
90 
92  public:
94  static errno_t ReadRequest(const void* p, size_t n, ListType* request_list) NLIB_NOEXCEPT;
95 
96  private:
98 };
99 
100 } // namespace jsonrpc
101 } // namespace msgpack
102 NLIB_NAMESPACE_END
103 
104 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
105 #undef NLIB_VIS_PUBLIC
106 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
107 #endif
108 
109 #endif // INCLUDE_NN_NLIB_MSGPACK_JSONRPC_JSONRPCREQUEST_H_
JsonRpcRequestWriter() noexcept
デフォルトコンストラクタです。
JSON-RPCのレスポンスを表すクラスです。
JsonRpcRequest() noexcept
デフォルトコンストラクタです。
errno_t WriteNotification(const char *method, const MpObject &params) noexcept
JSON-RPCのNotificationを書き込みます。
const char * GetMethod() const noexcept
このリクエストのメソッド名を取得します。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:145
void SetId(reqid_t id) noexcept
リクエストのidを設定します。
JSON-RPCのリクエストをシリアライズしてメモリに書きこむためのクラスです。
reqid_t GetId() const noexcept
このリクエストのid を取得します。0の場合はリクエストはnotificationとなります。
UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指...
Definition: UniquePtr.h:96
std::unique_ptrに相当するクラスが定義されています。
#define NLIB_VIS_HIDDEN
関数やクラス等のシンボルをライブラリの外部に公開しません。
Definition: Platform_unix.h:60
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
MessagePack又はJSONを読み込むことで作成されるオブジェクトです。
Definition: MpObject.h:82
JsonRpcRequestWriter(bool use_msgpack) noexcept
trueにすることでJSONの記述方式にJSONではなくmsgpackを利用します。
std::vectorに似ていますが、コピーできないオブジェクトを格納可能なクラスが定義されています。 ...
void swap(MpObject &rhs) noexcept
オブジェクトの中身をスワップします。
Definition: MpObject.h:271
JSON-RPCリクエストを読み込むためのクラスです。
JSON-RPCのリクエストを表すクラスです。
void MoveParamsFrom(MpObject &params) noexcept
JSON-RPCのパラメータを設定します。
MessagePack, JSON及びCSVを読み込むと作成されるオブジェクトです。
Nlist< JsonRpcRequest > ListType
バイト列から復元されるJSON-RPCリクエストのシーケンスを格納する型
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:86
開発環境別の設定が書かれるファイルです。
uint32_t reqid_t
JSON-RPCのリクエストに付与されるidの型です。
Definition: JsonRpcClient.h:19
std::vectorに似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。 ...
Definition: Nlist.h:19
const MpObject & GetParams() const noexcept
このリクエストのパラメータを取得します。
errno_t WriteRequest(const JsonRpcRequest &req) noexcept
JSON-RPCのリクエストを書き込みます。
size_t JsonRpcServerExec(const void *p, size_t n, ReallocOutputStream::UniquePtrType *ptr)
JSON-RPCリクエストを処理してJSON-RPCレスポンスのバイト列を作成します。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
MpObject & GetParams() noexcept
このリクエストのパラメータを取得します。
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24