/**
 *
 * Agora Real Time Engagement
 * Created by Wei Hu in 2022-04.
 * Copyright (c) 2022 Agora IO. All rights reserved.
 *
 */
#pragma once

#include "rte_config.h"

#include <stdbool.h>

#include "lib/signature.h"
#include "uv.h"

#define RTE_NODEJS_SEM_SIGNATURE 0xB5F7D324A07B41E4U

typedef struct rte_nodejs_sem_t {
  rte_signature_t signature;

  uv_mutex_t finished_lock;
  uv_cond_t finished_cond;
  bool finished;
} rte_nodejs_sem_t;

AGORA_RTE_PRIVATE_API bool rte_nodejs_sem_check_integrity(
    rte_nodejs_sem_t* self);

AGORA_RTE_API void rte_nodejs_sem_init(rte_nodejs_sem_t* self);

AGORA_RTE_API void rte_nodejs_sem_signal(rte_nodejs_sem_t* self);

AGORA_RTE_API void rte_nodejs_sem_wait(rte_nodejs_sem_t* self);

AGORA_RTE_API void rte_nodejs_sem_cleanup(rte_nodejs_sem_t* self);
