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/Swap.h"
10 #include "nn/nlib/UniquePtr.h"
12 #include "nn/nlib/Cstring.h"
16 
17 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
18 #undef NLIB_VIS_PUBLIC
19 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
20 #endif
21 
22 NLIB_NAMESPACE_BEGIN
23 namespace msgpack {
24 namespace jsonrpc {
25 
26 namespace fortest {
27 class JsonRpcErrorRequestTest;
28 } // namespace fortest
29 
30 typedef uint32_t reqid_t;
31 
33  public:
34  // NOTE:
35  // If m_Id is 0, the request becomes notification(ID is not sent.).
36  JsonRpcRequest() : m_Id(0) {}
37  reqid_t GetId() const { return m_Id; }
38  const char* GetMethod() const { return m_Method.get(); }
39  const MpObject& GetParams() const { return m_Params; }
40  MpObject& GetParams() { return m_Params; }
41 
42  void SetId(reqid_t id) { m_Id = id; }
43  NLIB_VIS_PUBLIC bool SetMethod(const char* method);
44  void MoveParamsFrom(MpObject& params) { // NOLINT
45  MpObject tmp;
46  tmp.swap(params);
47  tmp.swap(m_Params);
48  }
49 
50  private:
51  NLIB_VIS_HIDDEN JsonRpcResponse& GetResponse() { return m_Response; }
52  NLIB_VIS_HIDDEN bool SetMethodRaw(const void* p, size_t n);
53  NLIB_VIS_HIDDEN errno_t Init(MpObject* rhs);
54  NLIB_VIS_HIDDEN errno_t Init(MpWalker* walker);
55 
56  private:
57  reqid_t m_Id;
58  UniquePtr<char[]> m_Method;
59  MpObject m_Params;
60  JsonRpcResponse m_Response;
61 
62  friend NLIB_VIS_PUBLIC size_t JsonRpcServerExec(const void* p, size_t n,
64  friend class JsonRpcRequestReader;
65  friend class fortest::JsonRpcErrorRequestTest;
66  NLIB_DISALLOW_COPY_AND_ASSIGN(JsonRpcRequest);
67 };
68 
70  public:
71  JsonRpcRequestWriter() : m_IsMsgpack(false), m_Cur(0), m_Count(0) {}
72  explicit JsonRpcRequestWriter(bool use_msgpack)
73  : m_IsMsgpack(use_msgpack), m_Cur(0), m_Count(0) {}
74  NLIB_VIS_PUBLIC errno_t BeginWriteRequest(uint32_t n);
75  NLIB_VIS_PUBLIC errno_t WriteRequest(const char* method, reqid_t id, const MpObject& params);
76  errno_t WriteNotification(const char* method, const MpObject& params) {
77  return WriteRequest(method, 0, params);
78  }
80  return WriteRequest(req.GetMethod(), req.GetId(), req.GetParams());
81  }
82  NLIB_VIS_PUBLIC errno_t EndWriteRequest(ReallocOutputStream::UniquePtrType* ptr, size_t* n);
83 
84  private:
85  NLIB_VIS_HIDDEN errno_t WriteJsonRequest(const char* method, reqid_t id,
86  const MpObject& params);
87  NLIB_VIS_HIDDEN errno_t WriteMsgpackRequest(const char* method, reqid_t id,
88  const MpObject& params);
89 
90  private:
91  bool m_IsMsgpack;
92  size_t m_Cur;
93  size_t m_Count;
94  ReallocOutputStream m_Ostr;
96 };
97 
99  public:
101  static errno_t ReadRequest(const void* p, size_t n, ListType* request_list);
102 
103  private:
104  NLIB_VIS_HIDDEN static errno_t ReadReqJson(const char* p, size_t n,
105  ListType* request_list);
106  NLIB_VIS_HIDDEN static errno_t ReadReqMsgpack(const uint8_t* p, size_t n,
107  ListType* request_list);
108 
109  private:
111 };
112 
113 } // namespace jsonrpc
114 } // namespace msgpack
115 NLIB_NAMESPACE_END
116 
117 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
118 #undef NLIB_VIS_PUBLIC
119 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
120 #endif
121 
122 #endif // INCLUDE_NN_NLIB_MSGPACK_JSONRPC_JSONRPCREQUEST_H_
JSON-RPCのレスポンスを表すクラスです。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:126
JSON-RPCのリクエストをシリアライズしてメモリに書きこむためのクラスです。
nlib_realloc()等のrealloc関数を利用して拡張するメモリ領域に書きこむ出力ストリームです。 ...
#define NLIB_VIS_HIDDEN
関数やクラス等のシンボルをライブラリの外部に公開しません。
Definition: Platform_unix.h:50
std::unique_ptrに相当するクラスが定義されています。
MessagePack又はJSONを読み込むことで作成されるオブジェクトです。
Definition: MpObject.h:83
reqid_t GetId() const
このリクエストのid を取得します。0の場合はリクエストはnotificationとなります。
const char * GetMethod() const
このリクエストのメソッド名を取得します。
void swap(MpObject &rhs) noexcept
オブジェクトの中身をスワップします。
Definition: MpObject.h:219
JSON-RPCリクエストを読み込むためのクラスです。
JSON-RPCのリクエストを表すクラスです。
void MoveParamsFrom(MpObject &params)
JSON-RPCのパラメータを設定します。
MessagePack, JSON及びCSVを読み込むと作成されるオブジェクトです。
errno_t WriteNotification(const char *method, const MpObject &params)
JSON-RPCのNotificationを書き込みます。
JsonRpcRequestWriter(bool use_msgpack)
trueにすることでJSONの記述方式にJSONではなくmsgpackを利用します。
Nlist< JsonRpcRequest > ListType
バイト列から復元されるJSON-RPCリクエストのシーケンスを格納する型
開発環境別の設定が書かれるファイルです。
const MpObject & GetParams() const
このリクエストのパラメータを取得します。
uint32_t reqid_t
JSON-RPCのリクエストに付与されるidの型です。
Definition: JsonRpcClient.h:19
std::vectorに似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。 ...
Definition: Nlist.h:19
strlen, strcpy等を安全に使えるようにラップしています。
MpObject & GetParams()
このリクエストのパラメータを取得します。
メモリ上に展開されたMessagePackのデータに高速にアクセスします。
Definition: MpWalker.h:17
JsonRpcRequestWriter()
デフォルトコンストラクタです。
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:51
size_t JsonRpcServerExec(const void *p, size_t n, ReallocOutputStream::UniquePtrType *ptr)
JSON-RPCリクエストを処理してJSON-RPCレスポンスのバイト列を作成します。
errno_t WriteRequest(const JsonRpcRequest &req)
JSON-RPCのリクエストを書き込みます。
void SetId(reqid_t id)
リクエストのidを設定します。
MessagePackを高速に読み込むためのクラスが定義されています。
JsonRpcRequest()
デフォルトコンストラクタです。
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24