#include "sttd_recorder.h"
#include "sttd_server.h"
+
+#define CLIENT_CLEAN_UP_TIME 500
+
+
static pthread_mutex_t stte_result_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t stte_result_time_mutex = PTHREAD_MUTEX_INITIALIZER;
static double g_recording_timeout = 60;
+static Ecore_Timer* g_check_client_timer = NULL;
Ecore_Timer* g_recording_timer = NULL;
Ecore_Timer* g_processing_timer = NULL;
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");
}
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();
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;
}
SLOG(LOG_DEBUG, TAG_STTD, "[Server] New default engine : %s", engine_id);
}
+#if 0
/* need to change state of app to ready */
int uid;
uid = stt_client_get_current_recognition();
ret = sttd_engine_agent_set_silence_detection(support_silence);
if (0 != ret)
SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to Result(%d)", ret);
+#endif
return;
}
/*
* 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.");
}
return ret;
}
+ g_check_client_timer = ecore_timer_add(CLIENT_CLEAN_UP_TIME, sttd_cleanup_client, NULL);
+ if (NULL == g_check_client_timer) {
+ SLOG(LOG_WARN, TAG_STTD, "[Main Warning] Fail to create timer of client check");
+ }
+
SLOG(LOG_DEBUG, TAG_STTD, "[Server SUCCESS] initialize");
return 0;
sttd_engine_agent_release();
+ if (NULL != g_check_client_timer) {
+ ecore_timer_del(g_check_client_timer);
+ g_check_client_timer = NULL;
+
+ SLOG(LOG_INFO, TAG_STTD, "[INFO] Delete ecore timer handle");
+ }
+
return STTD_ERROR_NONE;
}
static void __read_proc()
{
DIR *dp = NULL;
- struct dirent entry;
struct dirent *dirp = NULL;
- int ret = -1;
int tmp;
GList *iter = NULL;
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);
stt_network_finalize();
sttd_finalize();
+ sttd_dbus_close_connection();
ecore_main_loop_quit();
SLOG(LOG_DEBUG, TAG_STTD, "");