[Utils] Binary Exchanging support
authorPawel Kaczmarek <p.kaczmarek3@samsung.com>
Thu, 13 Aug 2015 11:47:57 +0000 (13:47 +0200)
committerWonYoung Choi <wy80.choi@samsung.com>
Thu, 20 Aug 2015 05:38:08 +0000 (14:38 +0900)
NativeManager
- callData
- callSyncData
- sendSyncData
- setDataListener

Change-Id: I20048cbc362e376d9fed99281ca830bb7dc3784e
Signed-off-by: Pawel Kaczmarek <p.kaczmarek3@samsung.com>
src/utils/utils_api.js

index 07bab02e32e9763f8b9d1546891c0c83f7c1060a..8b0a6c67147eb07a64423b882699b0ed9bf58df0 100755 (executable)
@@ -533,8 +533,6 @@ Converter.prototype.toEnum = function(val, e, nullable) {
 
 var _converter = new Converter();
 
-
-
 /////////////////////////////////////////////////////////////////////////////
 /** @constructor */
 var Validator = function() {
@@ -938,6 +936,8 @@ var NativeManager = function(extension) {
   if (!extension || !extension.internal ||
       !_type.isFunction(extension.postMessage) ||
       !_type.isFunction(extension.internal.sendSyncMessage) ||
+      !_type.isFunction(extension.sendSyncData) ||
+      !_type.isFunction(extension.setDataListener) ||
       !_type.isFunction(extension.sendRuntimeMessage) ||
       !_type.isFunction(extension.sendRuntimeAsyncMessage) ||
       !_type.isFunction(extension.sendRuntimeSyncMessage) ||
@@ -997,6 +997,44 @@ var NativeManager = function(extension) {
     console.error('Missing callback or listener identifier. Ignoring message.');
 
   }.bind(this));
+
+  extension_.setDataListener(function(msg, chunk_id) {
+    var msg = JSON.parse(msg);
+    msg.chunk_id = chunk_id;
+    var id;
+
+    if (msg.hasOwnProperty(this.CALLBACK_ID_KEY)) {
+      id = msg[this.CALLBACK_ID_KEY];
+      delete msg[this.CALLBACK_ID_KEY];
+
+      if (!_type.isFunction(this.callbacks_[id])) {
+        console.error('Wrong callback identifier. Ignoring message.');
+        return;
+      }
+
+      this.callbacks_[id](msg);
+      delete this.callbacks_[id];
+
+      return;
+    }
+
+    if (msg.hasOwnProperty(this.LISTENER_ID_KEY)) {
+      id = msg[this.LISTENER_ID_KEY];
+      delete msg[this.LISTENER_ID_KEY];
+
+      if (!_type.isFunction(this.listeners_[id])) {
+        console.error('Wrong listener identifier. Ignoring message.');
+        return;
+      }
+
+      this.listeners_[id](msg);
+
+      return;
+    }
+
+    console.error('Missing callback or listener identifier. Ignoring message.');
+
+  }.bind(this));
 };
 
 NativeManager.prototype.call = function(cmd, args, callback) {
@@ -1009,6 +1047,16 @@ NativeManager.prototype.call = function(cmd, args, callback) {
   return this.callSync(cmd, args);
 };
 
+NativeManager.prototype.callData = function(cmd, args, chunk, callback) {
+  args = args || {};
+
+  var replyId = this.nextReplyId;
+  args[this.CALLBACK_ID_KEY] = replyId;
+  this.callbacks_[replyId] = callback;
+
+  return this.callSyncData(cmd, args, chunk);
+};
+
 NativeManager.prototype.callSync = function(cmd, args) {
   var request = JSON.stringify({
     cmd: cmd,
@@ -1018,6 +1066,16 @@ NativeManager.prototype.callSync = function(cmd, args) {
   return JSON.parse(this.extension.internal.sendSyncMessage(request));
 };
 
+NativeManager.prototype.callSyncData = function(cmd, args, chunk) {
+  var request = JSON.stringify({
+    cmd: cmd,
+    args: args || {}
+  });
+  var response = this.extension.sendSyncData(request, chunk);
+  response.reply = JSON.parse(response.reply);
+  return response;
+};
+
 NativeManager.prototype.sendRuntimeMessage = function(msg, body) {
   return this.extension.sendRuntimeMessage(msg, body || '');
 };