//
// Created by xajhu on 2021/7/1 0001.
//

#include "task_manager.h"
#include "misc.h"

static uv_loop_t *g_pMainTaskLoop   = NULL;
static int        g_taskManagerExit = FALSE;

uv_loop_t *get_task_manager(void) {
    if (g_pMainTaskLoop == NULL) {
        g_pMainTaskLoop = uv_default_loop();
    }

    return g_pMainTaskLoop;
}

void task_manager_exit() {
    g_taskManagerExit = TRUE;
}

static int is_task_exit() {
    return (g_taskManagerExit == TRUE);
}

void task_manager_run() {
    int more;

    if (g_pMainTaskLoop == NULL) {
        g_pMainTaskLoop = uv_default_loop();
    }

    while (!is_task_exit()) {
        more = uv_run(g_pMainTaskLoop, UV_RUN_ONCE);

        if (more == FALSE) {
            more = uv_loop_alive(g_pMainTaskLoop);

            if (uv_run(g_pMainTaskLoop, UV_RUN_NOWAIT) != 0) {
                more = TRUE;
            }
        }
    }

    printf("exit..............\n");
}