[NBS] Listeners JS part
authorPawel Kaczmarek <p.kaczmarek3@samsung.com>
Thu, 5 Feb 2015 08:56:31 +0000 (09:56 +0100)
committerRafal Galka <r.galka@samsung.com>
Thu, 5 Feb 2015 12:03:13 +0000 (21:03 +0900)
[Verification] TCT 19/25

Change-Id: I67ea91a64876157492adb1684ff213f7b389568f
Signed-off-by: Pawel Kaczmarek <p.kaczmarek3@samsung.com>
src/networkbearerselection/networkbearerselection_api.js

index ca40ce4..1643385 100644 (file)
@@ -15,6 +15,35 @@ var NetworkType = {
   UNKNOWN: 'UNKNOWN'
 };
 
+var callbackId = 0;
+var callbacks = {};
+
+function nextCallbackId() {
+  return callbackId++;
+}
+
+function _networkBearerSelectionCallback(result) {
+  var id, callback;
+
+  for (id in callbacks) {
+    if (callbacks.hasOwnProperty(result.id)) {
+      callback = callbacks[id];
+      if (result.state === 'Success') {
+        native_.callIfPossible(callback.onsuccess);
+      }
+      if (result.state === 'Disconnected') {
+        native_.callIfPossible(callback.ondisconnected);
+        native_.removeListener('NetworkBearerSelectionCallback_' + id);
+        delete callbacks[id];
+      }
+      if (result.state === 'Error') {
+        native_.callIfPossible(callback.onerror, native_.getErrorObject(result));
+        native_.removeListener('NetworkBearerSelectionCallback_' + id);
+        delete callbacks[id];
+      }
+    }
+  }
+}
 
 function NetworkBearerSelection() {}
 
@@ -26,18 +55,26 @@ NetworkBearerSelection.prototype.requestRouteToHost = function(networkType, doma
     {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true}
   ]);
 
-  var callback = function(result) {
-    if (native_.isFailure(result)) {
-      native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
-      return;
-    }
+  var nativeParam = {
+    networkType: args.networkType,
+    domainName: args.domainName
+  };
 
-    var _result = native_.getResultObject(result);
+  var result = native_.callSync('NetworkBearerSelection_requestRouteToHost', nativeParam);
 
-    native_.callIfPossible(args.successCallback);
-  };
+  if (native_.isFailure(result)) {
+    native_.callIfPossible(args.errorCallback, native_.getErrorObject(result));
+  }
+
+  var id = nextCallbackId();
 
-  native_.call('NetworkBearerSelection_requestRouteToHost', args, callback);
+  native_.addListener('NetworkBearerSelectionCallback_' + id, _networkBearerSelectionCallback);
+
+  callbacks[id] = {
+    onsuccess: args.successCallback.onsuccess,
+    ondisconnected: args.successCallback.ondisconnected,
+    onerror: args.errorCallback
+  };
 };
 
 NetworkBearerSelection.prototype.releaseRouteToHost = function(networkType, domainName, successCallback, errorCallback) {
@@ -54,8 +91,6 @@ NetworkBearerSelection.prototype.releaseRouteToHost = function(networkType, doma
       return;
     }
 
-    var _result = native_.getResultObject(result);
-
     native_.callIfPossible(args.successCallback);
   };