X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=server%2Fsttd_server.c;h=8b91e60b529397933fcdb9a2eab6d737aa38e9b7;hb=e3e202d463f94aa58337a5e882f0772be9840bed;hp=78f64e65feab465b3da6e6708777ba37ddc5c9aa;hpb=f810e9e7f2bd3deb9a0a7224da3f393947eae35a;p=platform%2Fcore%2Fuifw%2Fstt.git diff --git a/server/sttd_server.c b/server/sttd_server.c old mode 100644 new mode 100755 index 78f64e6..8b91e60 --- a/server/sttd_server.c +++ b/server/sttd_server.c @@ -87,23 +87,23 @@ static void __cancel_recognition_internal() g_recording_timer = NULL; } + int ret = 0; int uid = 0; uid = stt_client_get_current_recognition(); - if (0 != uid) { - /* cancel engine recognition */ - int ret = sttd_engine_agent_recognize_cancel(); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel : result(%d)", ret); - } + app_state_e state = 0; + ret = sttd_client_get_state(uid, &state); - /* change uid state */ - sttd_client_set_state(uid, APP_STATE_READY); - stt_client_unset_current_recognition(); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] uid is NOT valid "); + return; + } - ret = sttdc_send_set_state(uid, (int)APP_STATE_READY); + if (0 != uid && (APP_STATE_PROCESSING == state || APP_STATE_RECORDING == state)) { + /* cancel engine recognition */ + ret = sttd_server_cancel(uid); if (0 != ret) { - SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to send state change : result(%d)", ret); + SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel : result(%d)", ret); } } else { SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] uid is NOT valid"); @@ -217,6 +217,9 @@ int __server_recognition_result_callback(stte_result_event_e event, const char* sttd_config_time_save(); sttd_config_time_reset(); + sttd_client_set_state(uid, APP_STATE_READY); + stt_client_unset_current_recognition(); + if (NULL == data || 0 == data_count) { if (0 != sttdc_send_result(uid, event, NULL, 0, msg)) { SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to send result"); @@ -238,8 +241,8 @@ int __server_recognition_result_callback(stte_result_event_e event, const char* } /* change state of uid */ - sttd_client_set_state(uid, APP_STATE_READY); - stt_client_unset_current_recognition(); +// sttd_client_set_state(uid, APP_STATE_READY); +// stt_client_unset_current_recognition(); } else if (STTE_RESULT_EVENT_PARTIAL_RESULT == event) { SLOG(LOG_DEBUG, TAG_STTD, "[Server] The partial result from engine is event[%d] data_count[%d]", event, data_count); @@ -266,6 +269,17 @@ int __server_recognition_result_callback(stte_result_event_e event, const char* } sttd_config_time_reset(); + int ret = 0; + if (APP_STATE_RECORDING == state) { + ret = sttd_engine_agent_recognize_cancel(); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel: result(%d)", ret); + } + } + + sttd_client_set_state(uid, APP_STATE_READY); + stt_client_unset_current_recognition(); + if (0 != sttdc_send_result(uid, event, NULL, 0, msg)) { SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to send result "); @@ -277,8 +291,8 @@ int __server_recognition_result_callback(stte_result_event_e event, const char* } /* change state of uid */ - sttd_client_set_state(uid, APP_STATE_READY); - stt_client_unset_current_recognition(); +// sttd_client_set_state(uid, APP_STATE_READY); +// stt_client_unset_current_recognition(); } else { /* nothing */ } @@ -329,6 +343,7 @@ int __server_speech_status_callback(stte_speech_status_e status, void *user_para if (STTE_SPEECH_STATUS_BEGINNING_POINT_DETECTED == status) { SLOG(LOG_DEBUG, TAG_STTD, "Begin Speech detected"); + sttdc_send_speech_status(uid, status); } else if (STTE_SPEECH_STATUS_END_POINT_DETECTED == status) { SLOG(LOG_DEBUG, TAG_STTD, "End Speech detected"); ecore_main_loop_thread_safe_call_async(__stop_by_silence, NULL); @@ -346,6 +361,8 @@ int __server_speech_status_callback(stte_speech_status_e status, void *user_para int __server_error_callback(stte_error_e error, const char* msg) { SLOG(LOG_DEBUG, TAG_STTD, "[Server] Error Callback is called"); + ecore_main_loop_thread_safe_call_async(__cancel_by_error, NULL); + return STTD_ERROR_NONE; } @@ -420,51 +437,10 @@ void __sttd_server_silence_changed_cb(bool value, void* user_data) /* * Daemon function */ - -static void __sig_handler(int signo) -{ - /* restore signal handler */ - signal(signo, SIG_DFL); - - /* Send error signal to clients */ - int* client_list = NULL; - int client_count = 0; - int i = 0; - if (0 != sttd_client_get_list(&client_list, &client_count)) { - if (NULL != client_list) { - free(client_list); - client_list = NULL; - } - } - - if (NULL != client_list) { - for (i = 0; i < client_count; i++) { - sttdc_send_error_signal(client_list[i], STTD_ERROR_SERVICE_RESET, "Service Reset"); - } - - free(client_list); - client_list = NULL; - } - - /* invoke signal again */ - raise(signo); -} - -static void __register_sig_handler() -{ - signal(SIGSEGV, __sig_handler); - signal(SIGABRT, __sig_handler); - signal(SIGTERM, __sig_handler); - signal(SIGINT, __sig_handler); - signal(SIGQUIT, __sig_handler); -} - int sttd_initialize(stte_request_callback_s *callback) { int ret = 0; - __register_sig_handler(); - if (0 != pthread_mutex_init(&stte_result_mutex, NULL)) { SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to initialize stte result mutex."); } @@ -535,9 +511,7 @@ int sttd_finalize() static void __read_proc() { DIR *dp = NULL; - struct dirent entry; struct dirent *dirp = NULL; - int ret = -1; int tmp; GList *iter = NULL; @@ -554,11 +528,7 @@ static void __read_proc() SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Fail to open proc"); } else { do { - ret = readdir_r(dp, &entry, &dirp); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Fail to readdir"); - break; - } + dirp = readdir(dp); if (NULL != dirp) { tmp = atoi(dirp->d_name);