[Convergence] Fix for Payload dictionary. 67/98767/4
authorTomasz Marciniak <t.marciniak@samsung.com>
Fri, 18 Nov 2016 14:32:37 +0000 (15:32 +0100)
committerHyunjin Park <hj.na.park@samsung.com>
Mon, 21 Nov 2016 04:54:31 +0000 (20:54 -0800)
[Verification] Code compiles.

Change-Id: I386c3630b19c412a1de5e0624ec139c8a5129a18
Signed-off-by: Tomasz Marciniak <t.marciniak@samsung.com>
src/convergence/convergence_api.js
src/convergence/convergence_payload.cc

index 8764443795bdf81d81b2a9db12fb944db20559cc..c2c93ad78575893e06d95f3836563f7d18817a37 100644 (file)
@@ -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;
index 9c3206c441c7ee7919d5e34d4dd174c58e189fc3..b038ed8c13040be994a4bddf3dd8f46c00fa74e9 100644 (file)
@@ -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<picojson::array>();
   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<int>(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<std::string>()) {
+      const std::string value = item.get(kValue).get<std::string>();
+
+      error = conv_payload_set_string(payload_handle_, key.c_str(), value.c_str());
+    } else if (item.get(kValue).is<picojson::array>()) {
+      const picojson::array& value = item.get(kValue).get<picojson::array>();
+
+      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<unsigned char>(value.at(i).get<double>());
       }
+
+      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<picojson::array>()) { // 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));
     }