applys worker launch for package worker 97/177897/2
authorJeonghoon Park <jh1979.park@samsung.com>
Fri, 4 May 2018 08:00:16 +0000 (17:00 +0900)
committerJeonghoon Park <jh1979.park@samsung.com>
Fri, 4 May 2018 08:01:09 +0000 (17:01 +0900)
Change-Id: I04b249e49b46b04b7d97215791eea089c002af1a

daemon/src/tizen-things-daemon.c

index ca4bfe0..025b1f0 100644 (file)
 #include <glib-unix.h>
 #include "ttd-log.h"
 #include "ttd-cloud-conn-state.h"
-#include "ttd-cmd-type.h"
+#include "ttd-cmd.h"
 #include "ttd-queue.h"
 #include "ttd-conn-mgr.h"
 #include "ttd-task.h"
 #include "ttd-http.h"
 #include "ttd-parse-cmd.h"
 #include "ttd-worker-interface.h"
-
+#include "ttd-worker-handle.h"
 
 #ifndef SERVER_URL
 /* TODO : remove it after test */
@@ -103,8 +103,36 @@ static void __main_thread_pool_func(gpointer thread_data, gpointer pool_data)
        ret = ttd_task_run(task);
        if (ret)
                _E("Failed to ttd_task_func_run()");
+
+       ttd_task_free(task);
 }
 
+static ttd_task_func __get_task_func(ttd_cmd_data *cmd)
+{
+       ttd_task_func func = NULL;
+       retv_if(!cmd, NULL);
+
+       switch (ttd_cmd_get_type(cmd)) {
+       case TTD_CMD_TYPE_POWER:
+               break;
+       case TTD_CMD_TYPE_CONFIG:
+               break;
+       case TTD_CMD_TYPE_PACKAGE:
+       case TTD_CMD_TYPE_INFO:
+               func = ttd_worker_launch;
+               break;
+       case TTD_CMD_TYPE_DIAGNOSIS:
+               break;
+       case TTD_CMD_TYPE_LOCAL:
+               break;
+       case TTD_CMD_TYPE_UNKNOWN:
+       case TTD_CMD_TYPE_MAX:
+       default:
+               break;
+       }
+
+       return func;
+}
 static gboolean __daemon_job_handler(gpointer data)
 {
        ttd_data *d_data = data;
@@ -128,7 +156,19 @@ static gboolean __daemon_job_handler(gpointer data)
        cmd_data = ttd_queue_timeout_pop(TTD_QUEUE_TYPE_CMD, 500);
        if (cmd_data) {
                ttd_task *new_task = NULL;
+               ttd_task_func func = NULL;
                /* Do something, creates task... */
+               func = __get_task_func(cmd_data);
+               if (!func) {
+                       _E("task func is not defined - type[%d]",
+                               ttd_cmd_get_type(cmd_data));
+
+                       ttd_cmd_free(cmd_data);
+                       return TRUE;
+               }
+
+               new_task = ttd_task_new(TTD_TASK_PRIORITY_NORMAL, func,
+                       cmd_data, (ttd_task_data_free_func)ttd_cmd_free);
 
                g_thread_pool_push(d_data->thread_pool, new_task, NULL);
        }
@@ -157,7 +197,7 @@ static int __say_hello_to_cloud(void *data)
                                ttd_queue_push(TTD_QUEUE_TYPE_CMD,
                                        cmd_data, (ttd_queue_item_free_func)ttd_cmd_free);
                }
-       }else
+       } else
                _D("there is no cmd now");
 
        return 0;
@@ -238,10 +278,11 @@ int main(int argc, char* argv[])
 
        d_data->thread_pool =
                g_thread_pool_new(__main_thread_pool_func, d_data, -1, FALSE, NULL);
-       g_thread_pool_set_sort_function(d_data->thread_pool, ttd_task_sort_func, NULL);
+       g_thread_pool_set_sort_function(
+               d_data->thread_pool, ttd_task_sort_func, NULL);
 
        _D("[delay] start-to-ready - %.3lf(ms)",
-               (double)(_get_monotonic_time()- start)/1000);
+               (double)(_get_monotonic_time() - start)/1000);
        g_idle_add(__do_device_register, d_data);
 
        g_main_loop_run(d_data->mainloop);