pocket_relay_client_shared/servers/
mod.rs1use futures::Future;
4use parking_lot::Mutex;
5use tokio::task::AbortHandle;
6
7pub mod blaze;
8pub mod http;
9pub mod qos;
10pub mod redirector;
11pub mod telemetry;
12pub mod tunnel;
13pub mod udp_tunnel;
14
15pub const REDIRECTOR_PORT: u16 = 42127;
17pub const BLAZE_PORT: u16 = 42128;
19pub const TELEMETRY_PORT: u16 = 42129;
21pub const QOS_PORT: u16 = 42130;
23pub const HTTP_PORT: u16 = 42131;
25pub const TUNNEL_HOST_PORT: u16 = 42132;
27pub const RANDOM_PORT: u16 = 0;
29pub const GAME_HOST_PORT: u16 = 3659;
31
32static SERVER_TASK_COLLECTION: Mutex<Vec<AbortHandle>> = Mutex::new(Vec::new());
34
35pub fn has_server_tasks() -> bool {
37 let values = &mut *SERVER_TASK_COLLECTION.lock();
38 !values.is_empty()
39}
40
41#[inline]
47pub fn spawn_server_task<F>(task: F)
48where
49 F: Future<Output = ()> + Send + 'static,
50{
51 let handle = tokio::spawn(task);
52 add_server_task(handle.abort_handle());
53}
54
55pub fn add_server_task(handle: AbortHandle) {
60 let values = &mut *SERVER_TASK_COLLECTION.lock();
61 values.push(handle);
62}
63
64pub fn stop_server_tasks() {
67 let values = {
69 let values = &mut *SERVER_TASK_COLLECTION.lock();
70 values.split_off(0)
71 };
72
73 values.into_iter().for_each(|value| value.abort());
75}