1 #include <Poco/JSON/JSON.h>
2 #include <Poco/JSON/Stringifier.h>
3 #include <Poco/JSON/Parser.h>
4 #include <Poco/JSON/JSONException.h>
5 #include <Poco/Dynamic/Var.h>
36 (*this) = std::forward<DRCEInputJsonMessage>(rhs);
56 requestType = std::move(rhs.getRequestType());
57 requestData = std::move(rhs.getRequestData());
58 requestId = std::move(rhs.getRequestId());
59 pTaskRequest = std::move(rhs.getTaskRequest());
60 (*
dynamic_cast<Subtasks*
>(
this)) = std::move(static_cast<Subtasks>(rhs));
67 requestData = requestData_;
68 if (!requestData.empty())
71 pTaskRequest = taskRequestFactory.
create(requestType);
72 if (!pTaskRequest.isNull())
74 if (!pTaskRequest->unserialize(requestData))
77 errorMsg = pTaskRequest->getErrorMsg();
87 pTaskRequest = pTaskRequest_;
88 if (!pTaskRequest.isNull())
90 requestType = pTaskRequest->getRequestType();
91 if (!pTaskRequest->serialize(requestData))
94 errorMsg = pTaskRequest->getErrorMsg();
102 requestType = DRCETaskRequest::RequestType::rtSetTaskExecute;
105 pTaskRequest =
nullptr;
109 void DRCEInputJsonMessage::packToObject(Poco::JSON::Object& obj)
throw (Poco::Exception)
115 Poco::JSON::Array::Ptr pSubtasks =
new Poco::JSON::Array();
116 if (!pSubtasks.isNull())
118 packToArray(*pSubtasks);
123 void DRCEInputJsonMessage::packToArray(Poco::JSON::Array& arr)
throw (Poco::Exception)
125 for (
size_t i=0;i<getSubtasksCount();++i)
127 Poco::JSON::Object::Ptr
pObj =
new Poco::JSON::Object();
130 DRCEInputJsonMessage inputJsonMessage = getSubtaskItem(i);
131 inputJsonMessage.packToObject(*pObj);
137 void DRCEInputJsonMessage::unpackFromObject(Poco::JSON::Object& obj)
throw (Poco::Exception)
155 if (pTaskRequest.isNull())
162 long long taskId = convertVarToNumeric<long long>(tmp, 0);
163 if (taskId > std::numeric_limits<unsigned int>::max() || taskId < 0)
168 if (!pSubtasks.isNull())
170 unpackFromArray(*pSubtasks);
174 void DRCEInputJsonMessage::unpackFromArray(Poco::JSON::Array& arr)
throw (Poco::Exception)
176 for (
size_t i=0;i<arr.size();++i)
178 Poco::JSON::Object::Ptr pObj = arr.getObject(i);
181 DRCEInputJsonMessage inputJsonMessage;
182 inputJsonMessage.unpackFromObject(*pObj);
183 addSubtaskItem(std::forward<DRCEInputJsonMessage>(inputJsonMessage));
194 Poco::JSON::Object::Ptr pObj =
new Poco::JSON::Object();
200 std::stringstream ostr;
201 Poco::JSON::Stringifier::stringify(pObj, ostr);
206 catch(Poco::Exception& e)
212 catch(std::exception& e)
230 Poco::JSON::Parser parser;
231 Poco::Dynamic::Var res = parser.parse(json);
232 Poco::JSON::Object::Ptr pObj = res.extract<Poco::JSON::Object::Ptr>();
235 unpackFromObject(*pObj);
239 catch(Poco::JSON::JSONException& e)
245 catch(Poco::Exception& e)
251 catch(std::exception& e)
263 is.seekg(0, std::ios::end);
264 json.resize(is.tellg());
265 is.seekg(0, std::ios::beg);
266 is.read(const_cast<char*>(json.c_str()), json.size());