nlib
JsonRpcResponse.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_MSGPACK_JSONRPC_JSONRPCRESPONSE_H_
4 #define INCLUDE_NN_NLIB_MSGPACK_JSONRPC_JSONRPCRESPONSE_H_
5 
6 #include "nn/nlib/Config.h"
7 #include "nn/nlib/UniquePtr.h"
8 #include "nn/nlib/Nlist.h"
11 
12 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
13 #undef NLIB_VIS_PUBLIC
14 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
15 #endif
16 
17 NLIB_NAMESPACE_BEGIN
18 namespace msgpack {
19 namespace jsonrpc {
20 typedef uint32_t reqid_t;
21 
23  public:
24  enum ErrorCode {
25  OK = 0,
26  PARSE_ERROR = -32700,
27  INVALID_REQUEST = -32600,
28  METHOD_NOT_FOUND = -32601,
29  INVALID_PARAMS = -32602,
30  INTERNAL_ERROR = -32603,
31  CLIENT_ABORT = -31000
32  };
34  : id_(0), is_error_(false), error_code_(0), error_msg_(NULL) {}
36 
37  void MoveResultFrom(MpObject& obj) NLIB_NOEXCEPT; // NOLINT
38  void SetError(int errcode, const char* msg, MpObject& data) NLIB_NOEXCEPT; // NOLINT
39  void SetError(int errcode, const char* msg) NLIB_NOEXCEPT {
40  MpObject data;
41  this->SetError(errcode, msg, data);
42  }
43 
44  ErrorCode GetError() const NLIB_NOEXCEPT {
45  return static_cast<ErrorCode>(error_code_);
46  }
47  reqid_t GetId() const NLIB_NOEXCEPT { return id_; }
48  const char* GetErrorMessage() const NLIB_NOEXCEPT {
49  return error_msg_ ? error_msg_ : "";
50  }
51  MpObject& GetMpObject() NLIB_NOEXCEPT { return obj_; }
52  const MpObject& GetMpObject() const NLIB_NOEXCEPT { return obj_; }
53  NLIB_SAFE_BOOL(JsonRpcResponse, !is_error_);
54 
55  private:
56  void SetId(reqid_t id) NLIB_NOEXCEPT { id_ = id; } // from JsonRpcRequest::Init()
57  NLIB_VIS_HIDDEN errno_t Init(MpObject* rhs) NLIB_NOEXCEPT; // from JsonRpcResponseReader
58 
59  private:
60  reqid_t id_;
61  bool is_error_;
62  int error_code_;
63  char* error_msg_;
64  MpObject obj_;
65 
66  friend class JsonRpcResponseReader;
67  friend class JsonRpcRequest;
69 };
70 
72  public:
75  static errno_t ReadResponse(const void* p, size_t n, ListType* result_list) NLIB_NOEXCEPT;
76 };
77 
79  public:
80  JsonRpcResponseWriter() NLIB_NOEXCEPT : prv_(NULL), is_msgpack_(false) {}
82  explicit JsonRpcResponseWriter(bool msgpack) NLIB_NOEXCEPT
83  : prv_(NULL), is_msgpack_(msgpack) {}
84  errno_t BeginWriteResponse(uint32_t n) NLIB_NOEXCEPT;
85  errno_t WriteResponse(JsonRpcResponse* result) NLIB_NOEXCEPT;
86  errno_t EndWriteResponse(ReallocOutputStream::UniquePtrType* ptr, size_t* n) NLIB_NOEXCEPT;
87 
88  private:
89  struct JsonRpcResponseWriterPrivate;
90  JsonRpcResponseWriterPrivate* prv_;
91  bool is_msgpack_;
93 };
94 
95 } // namespace jsonrpc
96 } // namespace msgpack
97 NLIB_NAMESPACE_END
98 
99 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
100 #undef NLIB_VIS_PUBLIC
101 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
102 #endif
103 
104 #endif // INCLUDE_NN_NLIB_MSGPACK_JSONRPC_JSONRPCRESPONSE_H_
UniquePtr< JsonRpcResponse > ValueType
UniquePtr経由でJSON-RPCのレスポンスを格納します。
void SetError(int errcode, const char *msg) noexcept
JSON-RPC関数のエラーを設定します。
JSON-RPCのレスポンスを表すクラスです。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:145
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
Definition: Config.h:160
JsonRpcResponseWriter(bool msgpack) noexcept
引数にtrueを指定するとmsgpackのバイト列を作成します。
UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指...
Definition: UniquePtr.h:96
std::unique_ptrに相当するクラスが定義されています。
#define NLIB_VIS_HIDDEN
関数やクラス等のシンボルをライブラリの外部に公開しません。
Definition: Platform_unix.h:60
JSON-RPCのレスポンスのバイト列を読み込むためのクラスです。
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
MessagePack又はJSONを読み込むことで作成されるオブジェクトです。
Definition: MpObject.h:82
MpObject & GetMpObject() noexcept
JSON-RPCの戻り値か、エラーの付加情報を返します。
std::vectorに似ていますが、コピーできないオブジェクトを格納可能なクラスが定義されています。 ...
const MpObject & GetMpObject() const noexcept
JSON-RPCの戻り値か、エラーの付加情報を返します。
const char * GetErrorMessage() const noexcept
エラーメッセージを返します。
JSON-RPCのリクエストを表すクラスです。
MessagePack, JSON及びCSVを読み込むと作成されるオブジェクトです。
reqid_t GetId() const noexcept
JSON-RPCレスポンスのid を返します。
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:86
ErrorCode
JSON-RPCのレスポンスに含まれる(事前定義の)エラーコードの定義です。
開発環境別の設定が書かれるファイルです。
uint32_t reqid_t
JSON-RPCのリクエストに付与されるidの型です。
Definition: JsonRpcClient.h:19
std::vectorに似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。 ...
Definition: Nlist.h:19
JSON-RPCのレスポンスのバイト列を書きこむためのクラスです。
ErrorCode GetError() const noexcept
エラーコードを返します。
Nlist< ValueType > ListType
JSON-RPCのレスポンスのシーケンスを格納する型です。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
JsonRpcResponse() noexcept
デフォルトコンストラクタです。
JsonRpcResponseWriter() noexcept
デフォルトコンストラクタです。
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24