TV: 'TV'
};
-
-var PayloadType = {
- STRING: 'STRING',
- RAW_BYTES: 'RAW_BYTES'
-};
-
function SetReadOnlyProperty(obj, n, v) {
if (arguments.length > 2)
Object.defineProperty(
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);
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;
tizen.AppCommunicationServerService = AppCommunicationServerService;
tizen.AppCommunicationClientService = AppCommunicationClientService;
tizen.ChannelInfo = ChannelInfo;
-tizen.PayloadString = PayloadString;
-tizen.PayloadRawBytes = PayloadRawBytes;
// 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()
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");
}
}
}
}
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());
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));
}