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() {}
{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) {
return;
}
- var _result = native_.getResultObject(result);
-
native_.callIfPossible(args.successCallback);
};