From f502d0b38ecf5f045252d7600ce0c4d646b55f45 Mon Sep 17 00:00:00 2001 From: Tomasz Marciniak Date: Fri, 18 Nov 2016 15:32:37 +0100 Subject: [PATCH] [Convergence] Fix for Payload dictionary. [Verification] Code compiles. Change-Id: I386c3630b19c412a1de5e0624ec139c8a5129a18 Signed-off-by: Tomasz Marciniak --- src/convergence/convergence_api.js | 39 +------------------ src/convergence/convergence_payload.cc | 53 +++++++++++--------------- 2 files changed, 24 insertions(+), 68 deletions(-) diff --git a/src/convergence/convergence_api.js b/src/convergence/convergence_api.js index 87644437..c2c93ad7 100644 --- a/src/convergence/convergence_api.js +++ b/src/convergence/convergence_api.js @@ -44,12 +44,6 @@ var DeviceProfile = { TV: 'TV' }; - -var PayloadType = { - STRING: 'STRING', - RAW_BYTES: 'RAW_BYTES' -}; - function SetReadOnlyProperty(obj, n, v) { if (arguments.length > 2) Object.defineProperty( @@ -652,22 +646,7 @@ native_.addListener('APP_COMMUNICATION_SERVICE_LISTENER', function(result) { new ChannelInfo(result.channel.uri, result.channel.id), null); break; case 'onMessage': { - var payload = []; - for(var i = 0; i < result.payload.length; i++) { - var curPl = result.payload[i]; - switch(curPl.type) { - case PayloadType.STRING: - payload.push(new PayloadString(curPl.key, curPl.value)); - break; - case PayloadType.RAW_BYTES: - payload.push(new PayloadRawBytes(curPl.key, curPl.value)); - break; - default: - console.log('ERROR: Unknown payload type'); - break; - } - } - + var payload = result.payload; native_.callIfPossible(s._listenerCallback, new ChannelInfo(result.channel.uri, result.channel.id), payload, result.senderId); @@ -998,20 +977,6 @@ function ChannelInfo(uri, id) { this.id = id; } -function PayloadString(key, value) { - validator_.isConstructorCall(this, PayloadString); - this.key = key; - this.value = value; - SetReadOnlyProperty(this, 'type', PayloadType.STRING); // read only property -} - -function PayloadRawBytes(key, value) { - validator_.isConstructorCall(this, PayloadRawBytes); - this.key = key; - this.value = value; - SetReadOnlyProperty(this, 'type', PayloadType.RAW_BYTES); // read only property -} - function ClientInfo(isHost, clientId, connectionTime) { validator_.isConstructorCall(this, ClientInfo); this.isHost = isHost; @@ -1024,5 +989,3 @@ tizen.RemoteAppControlService = RemoteAppControlService; tizen.AppCommunicationServerService = AppCommunicationServerService; tizen.AppCommunicationClientService = AppCommunicationClientService; tizen.ChannelInfo = ChannelInfo; -tizen.PayloadString = PayloadString; -tizen.PayloadRawBytes = PayloadRawBytes; diff --git a/src/convergence/convergence_payload.cc b/src/convergence/convergence_payload.cc index 9c3206c4..b038ed8c 100644 --- a/src/convergence/convergence_payload.cc +++ b/src/convergence/convergence_payload.cc @@ -31,9 +31,6 @@ namespace { // Payload data keys and some values static const std::string kKey = "key"; static const std::string kValue = "value"; -static const std::string kPayloadDataType = "type"; // String, bytes -static const std::string kTypeString = "STRING"; -static const std::string kTypeRawBytes = "RAW_BYTES"; } // namespace ConvergencePayloadArray::ConvergencePayloadArray() @@ -87,28 +84,33 @@ void ConvergencePayloadArray::FromJson(const picojson::value &payload_json) { const picojson::array &payload_items = payload_json.get(); for (size_t i = 0; i < payload_items.size(); i++) { + int error = CONV_ERROR_NONE; picojson::value item = payload_items[i]; - const std::string type = item.get(kPayloadDataType).to_str(); const std::string key = item.get(kKey).to_str(); - const std::string value = item.get(kValue).to_str(); // TODO: check if it is an object - if (kTypeString == type) { - int error = conv_payload_set_string(payload_handle_, key.c_str(), value.c_str()); - if (CONV_ERROR_NONE != error) { - trace_conv_error(error, __LINE__, "setting payload string"); - } - } else if (kTypeRawBytes == type) { - int length = static_cast(value.size()); - unsigned char bytes[length]; - memcpy(bytes, value.c_str(), length); - - int error = conv_payload_set_byte(payload_handle_, key.c_str(), length, bytes); - if (CONV_ERROR_NONE != error) { - trace_conv_error(error, __LINE__, "setting payload string"); + if (item.get(kValue).is()) { + const std::string value = item.get(kValue).get(); + + error = conv_payload_set_string(payload_handle_, key.c_str(), value.c_str()); + } else if (item.get(kValue).is()) { + const picojson::array& value = item.get(kValue).get(); + + unsigned int length = value.size(); + unsigned char* bytes = new unsigned char[length]; + + for(std::size_t i = 0; i < length; ++i) { + bytes[i] = static_cast(value.at(i).get()); } + + error = conv_payload_set_byte(payload_handle_, key.c_str(), length, bytes); + delete[] bytes; } else { - LoggerE("ERROR! Unknown type of payload [%s]", type.c_str()); + LoggerD("Unknown type"); + } + + if (CONV_ERROR_NONE != error) { + trace_conv_error(error, __LINE__, "setting payload failed"); } } } @@ -134,8 +136,7 @@ picojson::value ConvergencePayloadArray::ToJson(conv_payload_h payload_handle) { } std::string err; - picojson::parse(parsed_payload, payload_json_str, - payload_json_str + strlen(payload_json_str), &err); + picojson::parse(parsed_payload, payload_json_str, payload_json_str + strlen(payload_json_str), &err); free(payload_json_str); if (!err.empty()) { LoggerE("Error parsing payload json: %s", err.c_str()); @@ -155,15 +156,7 @@ picojson::value ConvergencePayloadArray::ToJson(conv_payload_h payload_handle) { picojson::object payload_object; payload_object[kKey] = picojson::value(item_name); - - // Recognizing type of the payload - if (item_value.is()) { // Byte array payload - payload_object[kPayloadDataType] = picojson::value(kTypeRawBytes); - payload_object[kValue] = item_value; - } else { // String payload - payload_object[kPayloadDataType] = picojson::value(kTypeString); - payload_object[kValue] = item_value; - } + payload_object[kValue] = item_value; payloads.push_back(picojson::value(payload_object)); } -- 2.34.1