typedef struct {
int uid;
bool connected;
+ bool connection_requesting;
rpc_port_proxy_tts_h rpc_h;
rpc_port_proxy_tts_notify_cb_h notify_cb_h;
char* engine_app_id;
static GList* g_tidl_infos = NULL;
+
+static rpc_port_proxy_tts_h __create_rpc_port(int uid, const char* engine_app_id);
+
static tts_tidl_info_s* __get_tidl_info_s(int uid)
{
GList* iter = NULL;
}
info->connected = true;
+ info->connection_requesting = false;
if (0 != rpc_port_proxy_tts_invoke_set_mode(info->rpc_h, tts_client_get_mode(client))) {
SLOG(LOG_ERROR, TAG_TTSC, "Failed to set mode");
return;
}
info->connected = false;
+ info->connection_requesting = false;
if (tts_client_is_listening_started(uid)) {
tts_core_handle_service_reset();
SLOG(LOG_DEBUG, TAG_TTSC, "Disconnected from server");
{
int uid = (intptr_t)user_data;
tts_client_s *client = tts_client_get_by_uid(uid);
- if (!client)
+ if (NULL == client) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get client");
return;
+ }
+
+ tts_tidl_info_s* info = __get_tidl_info_s(uid);
+ if (NULL == info) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get tidl info");
+ return;
+ }
+
+ if (0 != rpc_port_proxy_tts_destroy(info->rpc_h)) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to disconnect");
+ return;
+ }
+
+ info->rpc_h = __create_rpc_port(uid, info->engine_app_id);
+ if (NULL == info->rpc_h) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to create proxy");
+ return;
+ }
+ info->connection_requesting = false;
tts_core_notify_error_async(client, TTS_ERROR_PERMISSION_DENIED, client->utt_id, "Rejected");
SLOG(LOG_DEBUG, TAG_TTSC, "Rejected from server");
return TTS_ERROR_NONE;
}
+static void __request_tidl_connect(tts_tidl_info_s* info) {
+ if (info->connection_requesting) {
+ return;
+ }
+
+ int ret = rpc_port_proxy_tts_connect(info->rpc_h);
+ SLOG(LOG_INFO, TAG_TTSC, "[INFO] Request connection to stub. ret(%d)", ret);
+
+ info->connection_requesting = true;
+}
+
int tts_tidl_request_hello(int uid)
{
SLOG(LOG_DEBUG, TAG_TTSC, "[TIDL] tts_tidl_request_hello");
}
free(info->engine_app_id);
info->engine_app_id = strdup(engine_app_id);
+ info->connection_requesting = false;
}
if (!info->connected) {
SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not Connected");
- rpc_port_proxy_tts_connect(info->rpc_h);
+ __request_tidl_connect(info);
return TTS_ERROR_OPERATION_FAILED;
}