1010// ---------------------------------------------------------------------
1111// WsjcppJsonRpc20Error
1212
13- // must be this json:
14- // {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request."}, "id": null}
1513class WsjcppJsonRpc20Error {
1614 public:
17- WsjcppJsonRpc20Error (int nErrorCode, const std::string &sErrorMessage );
18- int getErrorCode ();
19- std::string getErrorMessage ();
15+ // WsjcppJsonRpc20Error(int nErrorCode, const std::string &sErrorMessage);
16+ WsjcppJsonRpc20Error (
17+ int nErrorCode,
18+ const std::string &sErrorMessage ,
19+ const std::vector<std::pair<std::string,std::string>> &vErrorContext = {}
20+ );
21+ int getErrorCode () const ;
22+ std::string getErrorMessage () const ;
23+ const std::vector<std::pair<std::string,std::string>> &getErrorContext () const ;
2024 nlohmann::json toJson ();
2125 private:
2226 std::string m_sErrorMessage;
2327 int m_nErrorCode;
28+ std::vector<std::pair<std::string,std::string>> m_vErrorContext;
2429};
2530
2631// ---------------------------------------------------------------------
@@ -133,6 +138,10 @@ class FakeWebSocketClient : public WsjcppJsonRpc20WebSocketClient {
133138 return m_sLastTextMessage;
134139 }
135140
141+ void clearLastTextMessage () {
142+ m_sLastTextMessage = " " ;
143+ }
144+
136145 private:
137146 std::string m_sLastTextMessage;
138147};
@@ -161,10 +170,8 @@ class WsjcppJsonRpc20WebSocketServer {
161170 std::map<void *, WsjcppJsonRpc20WebSocketClient *> m_mapClients;
162171};
163172
164- /* !
165- * WsjcppJsonRpc20ParamDef - helper api for define input params and descrip it for docs.
166- * */
167- // {"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3}
173+ // ---------------------------------------------------------------------
174+ // WsjcppJsonRpc20ParamDef - helper api for define input params and descrip it for docs.
168175
169176class WsjcppJsonRpc20ParamDef {
170177 public:
@@ -243,9 +250,13 @@ class WsjcppJsonRpc20Request {
243250 bool hasInputParam (const std::string &sParamName );
244251 std::string getInputString (const std::string &sParamName , const std::string &sDefaultValue );
245252 int getInputInteger (const std::string &sParamName , int defaultValue);
253+ bool getInputBoolean (const std::string &sParamName , bool defaultValue);
254+ nlohmann::json getInputJson (const std::string &sParamName , nlohmann::json defaultValue);
246255
247256 std::string getId ();
248- std::string getMethod ();
257+ std::string getMethodName ();
258+
259+ bool checkInputParams (const std::vector<WsjcppJsonRpc20ParamDef>& vParamDef);
249260
250261 void done (nlohmann::json& jsonResponseResult);
251262 void fail (WsjcppJsonRpc20Error error);
@@ -256,8 +267,9 @@ class WsjcppJsonRpc20Request {
256267 WsjcppJsonRpc20WebSocketServer *m_pServer;
257268
258269 nlohmann::json m_jsonRequest;
270+ nlohmann::json m_jsonParams;
259271 std::string m_sId;
260- std::string m_sMethod ;
272+ std::string m_sMethodName ;
261273 bool m_bResponseSend;
262274};
263275
@@ -276,11 +288,8 @@ class WsjcppJsonRpc20HandlerBase {
276288 bool haveUserAccess () const ;
277289 bool haveTesterAccess () const ;
278290 bool haveAdminAccess () const ;
279- bool checkAccess (
280- WsjcppJsonRpc20Request *pRequest,
281- WsjcppJsonRpc20Error& error
282- ) const ;
283- const std::vector<WsjcppJsonRpc20ParamDef> &inputs ();
291+ bool checkAccess (WsjcppJsonRpc20Request *pRequest) const ;
292+ const std::vector<WsjcppJsonRpc20ParamDef> &getParamsDef ();
284293
285294 virtual void handle (WsjcppJsonRpc20Request *pRequest) = 0;
286295
@@ -308,8 +317,7 @@ class WsjcppJsonRpc20HandlerBase {
308317 private:
309318 void validateParamName (const std::string &sName );
310319
311- std::vector<WsjcppJsonRpc20ParamDef> m_vInputs; // TODO rename to m_vParams to std::map
312- // std::map<std::string, WsjcppJsonRpc20ParamDef*> *m_vWsjcppJsonRpc20ParamDefs;
320+ std::vector<WsjcppJsonRpc20ParamDef> m_vParamsDef;
313321 std::string m_sActivatedFromVersion;
314322 std::string m_sDeprecatedFromVersion;
315323 bool m_bAccessUnauthorized;
0 commit comments