HCE project C++ developers source code library  1.1.1
HCE project developer library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
DRCEOutputJsonMessage.cpp
Go to the documentation of this file.
1 #include <Poco/JSON/Object.h>
2 #include <Poco/JSON/Array.h>
3 #include <Poco/JSON/JSON.h>
4 #include <Poco/JSON/Stringifier.h>
5 #include <Poco/JSON/Parser.h>
6 #include <Poco/JSON/JSONException.h>
7 #include <Poco/Dynamic/Var.h>
8 
9 #include "DRCEError.hpp"
11 
12 namespace HCE
13 {
14 namespace drce
15 {
16 //-----------------------------------------------------------------------------
18 :inherited(), errorMessage(""), time(0), data("")
19 {
20  if (!json.empty())
21  unserialize(json);
22 }
23 //-----------------------------------------------------------------------------
25 {
26  _isError = false;
28  errorMsg.clear();
29  errorMessage.clear();
30  time = 0;
31  data.clear();
32 }
33 //-----------------------------------------------------------------------------
34 bool DRCEOutputJsonMessage::serialize(std::string& json)
35 {
36  try
37  {
38  Poco::JSON::Object::Ptr obj = new Poco::JSON::Object();
39 
41  obj->set(drce_json_message_const::errorMessage, errorMessage);
44 
45  std::stringstream ostr;
46  Poco::JSON::Stringifier::stringify(obj, ostr);
47  json = ostr.str();
48  _isError = false;
49  }
50  catch(std::exception& e)
51  {
52  _isError = true;
53  errorMsg = e.what();
55  }
56  return !_isError;
57 }
58 //-----------------------------------------------------------------------------
59 bool DRCEOutputJsonMessage::unserialize(const std::string& json)
60 {
61  clear();
62 
63  try
64  {
65  Poco::JSON::Parser parser;
66  Poco::Dynamic::Var res = parser.parse(json);
67  Poco::JSON::Object::Ptr obj = res.extract<Poco::JSON::Object::Ptr>();
68 
69  Poco::Dynamic::Var tmp = obj->get(drce_json_message_const::errorCode);
70  errorCode = convertVarToNumeric<unsigned int>(tmp, 0);
71 
73  if (tmp.isString())
74  errorMessage = tmp.convert<std::string>();
75 
77  time = convertVarToNumeric(tmp, 0);
78 
80  if (tmp.isString())
81  data = tmp.convert<std::string>();
82 
83  _isError = false;
84  }
85  catch(Poco::JSON::JSONException& e)
86  {
87  _isError = true;
88  errorMsg = e.message();
90  }
91  catch(Poco::Exception& e)
92  {
93  _isError = true;
94  errorMsg = e.message();
96  }
97  return !_isError;
98 }
99 //-----------------------------------------------------------------------------
100 std::istream& operator>>(std::istream& is, DRCEOutputJsonMessage& outputJsonMessage)
101 {
102  std::string json;
103  is.seekg(0, std::ios::end);
104  json.resize(is.tellg());
105  is.seekg(0, std::ios::beg);
106  is.read(const_cast<char*>(json.c_str()), json.size());
107  outputJsonMessage.unserialize(json);
108  return is;
109 }
110 //-----------------------------------------------------------------------------
111 std::ostream& operator<<(std::ostream& os, const DRCEOutputJsonMessage& outputJsonMessage)
112 {
113  std::string json;
114  const_cast<DRCEOutputJsonMessage&>(outputJsonMessage).serialize(json);
115  return os << json;
116 }
117 //-----------------------------------------------------------------------------
118 //-----------------------------------------------------------------------------
119 } // namespace drce
120 } // namespace HCE