Add logic for updating when manager app is changed 33/97433/4
authorKwangyoun Kim <ky85.kim@samsung.com>
Mon, 14 Nov 2016 07:19:56 +0000 (16:19 +0900)
committersooyeon.kim <sooyeon.kim@samsung.com>
Tue, 15 Nov 2016 02:48:27 +0000 (11:48 +0900)
Change-Id: I3c327c48791a403009d65d19308583629caa808b

client/vc.c
client/vc_dbus.c
common/vc_defs.h
server/vcd_dbus.c
server/vcd_dbus.h
server/vcd_server.c

index b87cf54..537c336 100644 (file)
@@ -1793,6 +1793,16 @@ int __vc_cb_service_state(int state)
        return 0;
 }
 
+int __vc_cb_manager_pid(int manager_pid)
+{
+       SLOG(LOG_DEBUG, TAG_VCC, "Manager pid is changed : %d", manager_pid);
+
+       /* Save service state */
+       vc_client_set_mgr_pid(g_vc, manager_pid);
+
+       return 0;
+}
+
 int vc_set_service_state_changed_cb(vc_service_state_changed_cb callback, void* user_data)
 {
        if (0 != __vc_get_feature_enabled()) {
index 1cd3270..86dc65d 100644 (file)
@@ -33,6 +33,8 @@ extern void __vc_cb_result();
 
 extern int __vc_cb_service_state(int state);
 
+extern int __vc_cb_manager_pid(int manager_pid);
+
 
 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
 {
@@ -119,6 +121,20 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle
                        SLOG(LOG_DEBUG, TAG_VCC, " ");
 
                } /* VCD_METHOD_RESULT */
+               else if (dbus_message_is_signal(msg, if_name, VCD_METHOD_SEND_MANAGER_PID)) {
+                       int manager_pid = 0;
+
+                       dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &manager_pid, DBUS_TYPE_INVALID);
+                       if (dbus_error_is_set(&err)) {
+                               SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Get arguments error (%s)", err.message);
+                               dbus_error_free(&err);
+                       }
+
+                       SLOG(LOG_DEBUG, TAG_VCC, "<<<< manager pid is changed : %d", manager_pid);
+
+                       __vc_cb_manager_pid(manager_pid);
+
+               } /* VCD_METHOD_SEND_MANAGER_PID */
 
                else if (dbus_message_is_signal(msg, if_name, VCD_METHOD_ERROR)) {
                        SLOG(LOG_DEBUG, TAG_VCC, "===== Get Error");
index 7b6294d..5859338 100644 (file)
@@ -70,6 +70,7 @@ extern "C" {
 #define VCD_METHOD_ERROR               "vcd_method_error"
 #define VCD_METHOD_HELLO               "vcd_method_hello"
 #define VCD_METHOD_SET_SERVICE_STATE   "vcd_method_set_service_state"
+#define VCD_METHOD_SEND_MANAGER_PID    "vcd_method_send_manager_pid"
 
 /* Authority */
 #if 0
index 58f3bdf..e6a8aa6 100644 (file)
@@ -430,6 +430,39 @@ int vcdc_send_service_state(vcd_state_e state)
        return 0;
 }
 
+int vcdc_send_manager_pid(int manager_pid)
+{
+       DBusError err;
+       dbus_error_init(&err);
+
+       DBusMessage* msg = NULL;
+
+       /* Send to client */
+       msg = dbus_message_new_signal(
+               VC_CLIENT_SERVICE_OBJECT_PATH,
+               VC_CLIENT_SERVICE_INTERFACE,
+               VCD_METHOD_SEND_MANAGER_PID);
+
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
+               return VCD_ERROR_OUT_OF_MEMORY;
+       }
+
+       dbus_message_append_args(msg, DBUS_TYPE_INT32, &manager_pid, DBUS_TYPE_INVALID);
+
+       if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
+               return VCD_ERROR_OPERATION_FAILED;
+       } else {
+               SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send manager pid to client : pid(%d)", manager_pid);
+               dbus_connection_flush(g_conn_sender);
+       }
+
+       dbus_message_unref(msg);
+
+       return 0;
+}
+
 int vcdc_send_dialog(int manger_pid, int pid, const char* disp_text, const char* utt_text, int continuous)
 {
        DBusError err;
index a1abc46..45d251c 100644 (file)
@@ -57,6 +57,8 @@ int vcdc_send_service_state(vcd_state_e state);
 
 int vcdc_send_dialog(int manger_pid, int pid, const char* disp_text, const char* utt_text, int continuous);
 
+int vcdc_send_manager_pid(int manager_pid);
+
 
 #ifdef __cplusplus
 }
index 2baf934..ff49a3c 100644 (file)
@@ -252,7 +252,7 @@ static int __vcd_activate_app_by_appcontrol(const char* appid)
                }
                // Sent launch request
                ret = app_control_send_launch_request(app_control, NULL, NULL);
-               if(APP_CONTROL_ERROR_NONE != ret) {
+               if (APP_CONTROL_ERROR_NONE != ret) {
                        SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to send launch request, ret(%d)", ret);
                        return VCD_ERROR_OPERATION_FAILED;
                }
@@ -1313,6 +1313,9 @@ int vcd_server_mgr_initialize(int pid)
                return VCD_ERROR_OPERATION_FAILED;
        }
 
+       if (0 != vcdc_send_manager_pid(pid))
+               SLOG(LOG_WARN, TAG_VCD, "[Server WARNING] Fail to send manager pid");
+
        SLOG(LOG_DEBUG, TAG_VCD, "[Server Success] Manager initialize : pid(%d)", pid);
 
        return VCD_ERROR_NONE;
@@ -1329,6 +1332,9 @@ int vcd_server_mgr_finalize(int pid)
        /* Cancel recognition */
        vcd_server_mgr_cancel();
 
+       if (0 != vcdc_send_manager_pid(-1))
+               SLOG(LOG_WARN, TAG_VCD, "[Server WARNING] Fail to send manager pid");
+
        /* Remove manager information */
        if (0 != vcd_client_manager_unset()) {
                SLOG(LOG_WARN, TAG_VCD, "[Server WARNING] Fail to delete client");
@@ -1926,7 +1932,7 @@ int vcd_server_dialog(int pid, const char* disp_text, const char* utt_text, int
        }
 
        int ret = __vcd_server_launch_manager_app();
-       if (0 != ret){
+       if (0 != ret) {
                SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send dialog : mgr_pid(%d), pid(%d), disp_text(%s), utt_text(%s), continue(%d)", vcd_client_manager_get_pid(), pid, disp_text, utt_text, continuous);
                return ret;
        }