hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
SphinxOutputJsonMessage.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 
10 #include "SphinxError.hpp"
11 
12 namespace HCE
13 {
14 namespace sphinx
15 {
16 //-----------------------------------------------------------------------------
18 :inherited(), errorCode(0), errorMessage(""), data(""), time(0)
19 {
20  if (!json.empty())
21  unserialize(json);
22 }
23 //-----------------------------------------------------------------------------
25 :inherited(), errorCode(0), errorMessage(""), data(""), time(0)
26 {
27  *this = rhs;
28 }
29 //-----------------------------------------------------------------------------
31 {
32  if (&rhs!=this)
33  {
34  errorCode = rhs.getErrorCode();
35  errorMessage = rhs.getErrorMessage();
36  data = rhs.getData();
37  time = rhs.getTime();
38  }
39  return *this;
40 }
41 //-----------------------------------------------------------------------------
43 {
44  errorCode = 0;
45  errorMessage.clear();
46  data.clear();
47  time = 0;
48  _isError = false;
49 }
50 //-----------------------------------------------------------------------------
51 bool SphinxOutputJsonMessage::serialize(std::string& json)
52 {
53  _isError = true;
54  errorMsg.clear();
55  try
56  {
57  Poco::JSON::Object::Ptr obj = new Poco::JSON::Object();
58  obj->set(output_json_message_const::errorCode, errorCode);
59  obj->set(output_json_message_const::errorMessage, errorMessage);
60  obj->set(output_json_message_const::data, data);
61  obj->set(output_json_message_const::time, time);
62 
63  std::stringstream ostr;
64  Poco::JSON::Stringifier::stringify(obj, ostr);
65  json = ostr.str();
66 
67  _isError = false;
68  }
69  catch(std::exception& e)
70  {
71  errorMsg = e.what();
72  errorCode = ERROR_SERIALIZE;
73  }
74  return !_isError;
75 }
76 //-----------------------------------------------------------------------------
77 bool SphinxOutputJsonMessage::unserialize(const std::string& json)
78 {
79  clear();
80  _isError = true;
81  errorMsg.clear();
82  errorCode = NO_ERROR;
83  try
84  {
85  Poco::JSON::Parser parser;
86  Poco::Dynamic::Var res = parser.parse(json);
87  Poco::JSON::Object::Ptr obj = res.extract<Poco::JSON::Object::Ptr>();
88 
89  Poco::Dynamic::Var tmp = obj->get(output_json_message_const::errorCode);
90  errorCode = convertVarToNumeric<unsigned int>(tmp, 0);
91 
93  if (tmp.isString())
94  errorMessage = tmp.convert<std::string>();
95 
96  tmp = obj->get(output_json_message_const::data);
97  if (tmp.isString())
98  data = tmp.convert<std::string>();
99 
100  tmp = obj->get(output_json_message_const::time);
101  time = convertVarToNumeric<unsigned int>(tmp, 0);
102 
103  _isError = false;
104  }
105  catch(Poco::JSON::JSONException& e)
106  {
107  errorMsg = e.displayText();
108  errorCode = ERROR_UNSERIALIZE;
109  }
110  catch(Poco::Exception& e)
111  {
112  errorMsg = e.displayText();
113  errorCode = ERROR_UNSERIALIZE;
114  }
115  return !_isError;
116 }
117 //-----------------------------------------------------------------------------
118 std::istream& operator>>(std::istream& is, SphinxOutputJsonMessage& jsonHandler)
119 {
120  std::string json;
121  is.seekg(0, std::ios::end);
122  json.resize(is.tellg());
123  is.seekg(0, std::ios::beg);
124  is.read(const_cast<char*>(json.c_str()), json.size());
125  jsonHandler.unserialize(json);
126  return is;
127 }
128 //-----------------------------------------------------------------------------
129 std::ostream& operator<<(std::ostream& os, const SphinxOutputJsonMessage& jsonHandler)
130 {
131  std::string json;
132  const_cast<SphinxOutputJsonMessage&>(jsonHandler).serialize(json);
133  return os << json;
134 }
135 //-----------------------------------------------------------------------------
136 //-----------------------------------------------------------------------------
137 } // end namespace sphinx
138 } // end namespace HCE