use futures::Future;
use parking_lot::Mutex;
use tokio::task::AbortHandle;
pub mod blaze;
pub mod http;
pub mod qos;
pub mod redirector;
pub mod telemetry;
pub mod tunnel;
pub const REDIRECTOR_PORT: u16 = 42127;
pub const BLAZE_PORT: u16 = 42128;
pub const TELEMETRY_PORT: u16 = 42129;
pub const QOS_PORT: u16 = 42130;
pub const HTTP_PORT: u16 = 42131;
pub const TUNNEL_HOST_PORT: u16 = 42132;
pub const RANDOM_PORT: u16 = 0;
pub const GAME_HOST_PORT: u16 = 3659;
static SERVER_TASK_COLLECTION: Mutex<Vec<AbortHandle>> = Mutex::new(Vec::new());
pub fn has_server_tasks() -> bool {
let values = &mut *SERVER_TASK_COLLECTION.lock();
!values.is_empty()
}
#[inline]
pub fn spawn_server_task<F>(task: F)
where
F: Future<Output = ()> + Send + 'static,
{
let handle = tokio::spawn(task);
add_server_task(handle.abort_handle());
}
pub fn add_server_task(handle: AbortHandle) {
let values = &mut *SERVER_TASK_COLLECTION.lock();
values.push(handle);
}
pub fn stop_server_tasks() {
let values = {
let values = &mut *SERVER_TASK_COLLECTION.lock();
values.split_off(0)
};
values.into_iter().for_each(|value| value.abort());
}