@@ -45,10 +45,11 @@ RpcBase::~RpcBase()
4545 stop ();
4646}
4747
48- /* * @copydoc bool IRpc::call(const std::string&, const rapidjson::Document&, rapidjson::Document&, std::chrono::milliseconds) */
48+ /* * @copydoc bool IRpc::call(const std::string&, const rapidjson::Document&, rapidjson::Document&, rapidjson::Value&, std::chrono::milliseconds) */
4949bool RpcBase::call (const std::string& action,
5050 const rapidjson::Document& payload,
51- rapidjson::Document& response,
51+ rapidjson::Document& rpc_frame,
52+ rapidjson::Value& response,
5253 std::chrono::milliseconds timeout)
5354{
5455 bool ret = false ;
@@ -110,7 +111,8 @@ bool RpcBase::call(const std::string& action,
110111 // Extract response
111112 if (rpc_message)
112113 {
113- response.CopyFrom (rpc_message->payload , response.GetAllocator ());
114+ rpc_frame.Swap (rpc_message->rpc_frame );
115+ response.Swap (rpc_message->payload );
114116 delete rpc_message;
115117 }
116118 else
@@ -233,14 +235,14 @@ void RpcBase::processReceivedData(const void* data, size_t size)
233235 switch (msg_type)
234236 {
235237 case MessageType::CALL:
236- valid = decodeCall (unique_id, rpc_frame[2 ], rpc_frame[3 ]);
238+ valid = decodeCall (unique_id, rpc_frame, rpc_frame [2 ], rpc_frame[3 ]);
237239 break ;
238240 case MessageType::CALLRESULT:
239- valid = decodeCallResult (unique_id, rpc_frame[2 ]);
241+ valid = decodeCallResult (unique_id, rpc_frame, rpc_frame [2 ]);
240242 break ;
241243 case MessageType::CALLERROR:
242244 default :
243- valid = decodeCallError (unique_id, rpc_frame[2 ], rpc_frame[3 ], rpc_frame[4 ]);
245+ valid = decodeCallError (unique_id, rpc_frame, rpc_frame [2 ], rpc_frame[3 ], rpc_frame[4 ]);
244246 break ;
245247 }
246248 if (!valid)
@@ -283,15 +285,18 @@ bool RpcBase::send(const std::string& msg)
283285}
284286
285287/* * @brief Decode a CALL message */
286- bool RpcBase::decodeCall (const std::string& unique_id, const rapidjson::Value& action, const rapidjson::Value& payload)
288+ bool RpcBase::decodeCall (const std::string& unique_id,
289+ rapidjson::Document& rpc_frame,
290+ const rapidjson::Value& action,
291+ rapidjson::Value& payload)
287292{
288293 bool ret = false ;
289294
290295 // Check types
291296 if (action.IsString () && payload.IsObject ())
292297 {
293298 // Add request to the queue
294- RpcMessage* msg = new RpcMessage (unique_id, action.GetString (), payload);
299+ RpcMessage* msg = new RpcMessage (unique_id, action.GetString (), rpc_frame, payload);
295300 m_requests_queue.push (msg);
296301
297302 ret = true ;
@@ -301,15 +306,15 @@ bool RpcBase::decodeCall(const std::string& unique_id, const rapidjson::Value& a
301306}
302307
303308/* * @brief Decode a CALLRESULT message */
304- bool RpcBase::decodeCallResult (const std::string& unique_id, const rapidjson::Value& payload)
309+ bool RpcBase::decodeCallResult (const std::string& unique_id, rapidjson::Document& rpc_frame, rapidjson::Value& payload)
305310{
306311 bool ret = false ;
307312
308313 // Check types
309314 if (payload.IsObject ())
310315 {
311316 // Add result to the queue
312- RpcMessage* msg = new RpcMessage (unique_id, payload);
317+ RpcMessage* msg = new RpcMessage (unique_id, rpc_frame, payload);
313318 m_results_queue.push (msg);
314319
315320 ret = true ;
@@ -320,6 +325,7 @@ bool RpcBase::decodeCallResult(const std::string& unique_id, const rapidjson::Va
320325
321326/* * @brief Decode a CALLERROR message */
322327bool RpcBase::decodeCallError (const std::string& unique_id,
328+ rapidjson::Document& rpc_frame,
323329 const rapidjson::Value& error,
324330 const rapidjson::Value& message,
325331 const rapidjson::Value& payload)
@@ -330,6 +336,7 @@ bool RpcBase::decodeCallError(const std::string& unique_id,
330336 if (error.IsString () && message.IsString () && payload.IsObject ())
331337 {
332338 (void )unique_id;
339+ (void )rpc_frame;
333340 ret = true ;
334341 }
335342
0 commit comments