From 1e63ac5796ac957c07b6445577b053dca2fb1617 Mon Sep 17 00:00:00 2001
From: Piotr Kosko
Date: Thu, 1 Dec 2016 12:19:11 +0100
Subject: [PATCH] [Convergence] Reporting error while disconnect fails
Change-Id: I0c75536ffa79d89f1fd999646256195a5b33000c
Signed-off-by: Piotr Kosko
---
src/convergence/convergence_api.js | 14 +++++++-------
.../convergence_app_communication_service.cc | 19 ++++++++++++++++---
.../convergence_remote_app_control_service.cc | 18 ++++++++++++++++--
3 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/src/convergence/convergence_api.js b/src/convergence/convergence_api.js
index 9e362c5e..615b81cc 100644
--- a/src/convergence/convergence_api.js
+++ b/src/convergence/convergence_api.js
@@ -421,21 +421,21 @@ RemoteAppControlService.prototype.disconnect = function(successCallback, errorCa
throw new WebAPIException(WebAPIException.INVALID_STATE_ERR, 'Service is not connected yet.');
}
+ var that = this;
var result = native_.call('RemoteAppControlService_disconnect', {
deviceId: this._deviceId
}, function(result) {
if (native_.isFailure(result)) {
native_.callIfPossible(errorCallback, native_.getErrorObject(result));
+ } else {
+ updateWithInternalData({ connectionState: ConnectionState.NOT_CONNECTED }, that);
+ native_.callIfPossible(successCallback, that);
}
});
if (native_.isFailure(result)) {
throw native_.getErrorObject(result);
- } else {
- updateWithInternalData({ connectionState: ConnectionState.NOT_CONNECTED }, this);
}
-
- native_.callIfPossible(successCallback, this);
};
RemoteAppControlService.prototype.start = function() {
@@ -1054,20 +1054,20 @@ AppCommunicationClientService.prototype.disconnect = function(successCallback, e
if (this.connectionState != ConnectionState.CONNECTED)
throw new WebAPIException(WebAPIException.INVALID_STATE_ERR, 'Service is not connected yet.');
+ var that = this;
var result = native_.call('AppCommunicationClientService_disconnect', {
deviceId: this._deviceId
}, function(result) {
if (native_.isFailure(result)) {
native_.callIfPossible(errorCallback, native_.getErrorObject(result));
} else {
- native_.callIfPossible(successCallback, this);
+ updateWithInternalData({ connectionState: ConnectionState.NOT_CONNECTED }, that);
+ native_.callIfPossible(successCallback, that);
}
});
if (native_.isFailure(result)) {
throw native_.getErrorObject(result);
- } else {
- updateWithInternalData({ connectionState: ConnectionState.NOT_CONNECTED }, this);
}
};
diff --git a/src/convergence/convergence_app_communication_service.cc b/src/convergence/convergence_app_communication_service.cc
index 42ce200f..4272e4ee 100644
--- a/src/convergence/convergence_app_communication_service.cc
+++ b/src/convergence/convergence_app_communication_service.cc
@@ -467,14 +467,27 @@ common::TizenResult ConvergenceAppCommunicationClientService::Disconnect() {
if (!service)
return LogAndCreateTizenError(AbortError, "Service is NULL");
- const int error = conv_service_disconnect(service);
+ int error = conv_service_disconnect(service);
if (CONV_ERROR_NONE != error) {
- // TODO: Handle error
trace_conv_error(error, __LINE__, "conv_service_disconnect");
return LogAndCreateTizenError(AbortError, "conv_service_disconnect [fail]");
}
- return TizenSuccess();
+ conv_service_connection_state_e state = CONV_SERVICE_CONNECTION_STATE_NONE;
+ error = conv_service_get_connection_state(service, &state);
+ if (CONV_ERROR_NONE != error) {
+ LoggerE("Error gathering state [%d] : %s", error, get_error_message(error));
+ return LogAndCreateTizenError(AbortError, "Error gathering state");
+ } else {
+ LoggerD("state: %d" , state);
+
+ }
+ if (CONV_SERVICE_CONNECTION_STATE_NOT_CONNECTED == state) {
+ return TizenSuccess();
+ } else {
+ LoggerE("Service is still connected, reporting error");
+ return LogAndCreateTizenError(AbortError, "Disconnecting failed.");
+ }
}
diff --git a/src/convergence/convergence_remote_app_control_service.cc b/src/convergence/convergence_remote_app_control_service.cc
index 201b26d8..bd9612b5 100644
--- a/src/convergence/convergence_remote_app_control_service.cc
+++ b/src/convergence/convergence_remote_app_control_service.cc
@@ -123,7 +123,7 @@ TizenResult ConvergenceRemoteAppControlService::Disconnect() {
return LogAndCreateTizenError(AbortError, "Service with specified type does not exist");
}
- const int error = conv_service_disconnect(service);
+ int error = conv_service_disconnect(service);
if (CONV_ERROR_NONE != error) {
return LogAndCreateTizenError(AbortError, "conv_service_disconnect [Fail]");
} else {
@@ -132,7 +132,21 @@ TizenResult ConvergenceRemoteAppControlService::Disconnect() {
LoggerI("Disconnected from the remote service");
}
- return TizenSuccess();
+ conv_service_connection_state_e state = CONV_SERVICE_CONNECTION_STATE_NONE;
+ error = conv_service_get_connection_state(service, &state);
+ if (CONV_ERROR_NONE != error) {
+ LoggerE("Error gathering state [%d] : %s", error, get_error_message(error));
+ return LogAndCreateTizenError(AbortError, "Error gathering state");
+ } else {
+ LoggerD("state: %d" , state);
+
+ }
+ if (CONV_SERVICE_CONNECTION_STATE_NOT_CONNECTED == state) {
+ return TizenSuccess();
+ } else {
+ LoggerE("Service is still connected, reporting error");
+ return LogAndCreateTizenError(AbortError, "Disconnecting failed.");
+ }
}
TizenResult ConvergenceRemoteAppControlService::Start(const bool reply, const int cur_listener_id) {
--
2.34.1