2 * Copyright (C) 2012 TOYOTA MOTOR CORPORATION.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #include <json-glib/json-glib.h>
27 #include "standardjsonmessage.h"
29 JsonMessage::JsonMessage()
33 JsonMessage::~JsonMessage()
39 JsonMessage::encode(std::string type_, std::string name_,
40 std::string transactionid_, std::vector<JsonData>& data_)
43 sstr << "{\"type\":\"" << type_ << "\", \"name\":\"" << name_
45 for (auto itr = data_.begin(); itr != data_.end(); itr++) {
46 if (itr != data_.begin()) {
50 sstr << "\"" << (*itr).propertyName << "\"";
53 sstr << "{\"property\":\"" << (*itr).propertyName
54 << "\", \"value\":\"" << (*itr).value << "\"}";
57 sstr << "],\"transactionid\":\"" << transactionid_ << "\"}";
58 memset(encodebuf, 0, sizeof(encodebuf));
59 memcpy(encodebuf, const_cast<char*>(sstr.str().c_str()), sizeof(encodebuf));
64 JsonMessage::decode(std::string msg, size_t len)
68 JsonParser* parser = json_parser_new();
69 GError* error = nullptr;
70 if (!json_parser_load_from_data(parser, msg.c_str(), len, &error)) {
71 std::cerr << "Failed to load config: " << error->message << '\n';
75 JsonNode* node = json_parser_get_root(parser);
77 if (node == nullptr) {
78 std::cerr << "Unable to get JSON root object\n";
82 JsonReader* reader = json_reader_new(node);
84 if (reader == nullptr) {
85 std::cerr << "Unable to create JSON reader\n";
89 if (json_reader_read_member(reader, "type")) {
90 type = std::string(json_reader_get_string_value(reader));
91 json_reader_end_member(reader);
94 std::cerr << "Error Get type\n";
98 if (json_reader_read_member(reader, "name")) {
99 name = std::string(json_reader_get_string_value(reader));
100 json_reader_end_member(reader);
103 std::cerr << "Error Get name\n";
107 if (json_reader_read_member(reader, "transactionid")) {
108 transactionid = std::string(json_reader_get_string_value(reader));
109 json_reader_end_member(reader);
112 std::cerr << "Error Get transactionid\n";
116 if (json_reader_read_member(reader, "data")) {
117 if (json_reader_is_array(reader)) {
119 for (int i = 0; i < json_reader_count_elements(reader); i++) {
120 json_reader_read_element(reader, i);
121 if (json_reader_is_object(reader)) {
122 if (json_reader_read_member(reader, "property")) {
123 jdata.propertyName = std::string(
124 json_reader_get_string_value(reader));
125 json_reader_end_member(reader);
127 if (json_reader_read_member(reader, "value")) {
128 jdata.value = std::string(
129 json_reader_get_string_value(reader));
130 json_reader_end_member(reader);
132 if (json_reader_read_member(reader, "timestamp")) {
133 jdata.timestamp = json_reader_get_double_value(reader);
134 json_reader_end_member(reader);
136 if (json_reader_read_member(reader, "sequence")) {
137 jdata.sequence = json_reader_get_int_value(reader);
138 json_reader_end_member(reader);
140 data.push_back(jdata);
142 else if (json_reader_is_value(reader)) {
143 jdata.propertyName = std::string(
144 json_reader_get_string_value(reader));
145 data.push_back(jdata);
147 json_reader_end_element(reader);
152 if (json_reader_is_object(reader)) {
153 if (type == "valuechanged") {
154 jdata.propertyName = name;
157 if (json_reader_read_member(reader, "property")) {
158 jdata.propertyName = std::string(
159 json_reader_get_string_value(reader));
160 json_reader_end_member(reader);
163 if (json_reader_read_member(reader, "value")) {
164 jdata.value = std::string(
165 json_reader_get_string_value(reader));
166 json_reader_end_member(reader);
169 std::cerr << "Error Get value\n";
172 if (json_reader_read_member(reader, "timestamp")) {
173 jdata.timestamp = json_reader_get_double_value(reader);
174 json_reader_end_member(reader);
177 std::cerr << "Error Get timestamp\n";
180 if (json_reader_read_member(reader, "sequence")) {
181 jdata.sequence = json_reader_get_int_value(reader);
182 json_reader_end_member(reader);
185 std::cerr << "Error Get sequence\n";
189 else if (json_reader_is_value(reader)) {
190 jdata.propertyName = std::string(
191 json_reader_get_string_value(reader));
193 data.push_back(jdata);
197 std::cerr << "Error Get data\n";
200 json_reader_end_member(reader);
205 g_object_unref(reader);
206 g_object_unref(parser);
210 JsonMessage::getType()
216 JsonMessage::getName()
222 JsonMessage::getTransactionid()
224 return transactionid;
227 std::vector<JsonData>
228 JsonMessage::getData()