From 8280b06253209c41ab7fc141ed2c9bd5b3dee1e6 Mon Sep 17 00:00:00 2001 From: Luuk van Oijen Date: Mon, 20 Nov 2023 09:47:35 +0100 Subject: [PATCH] small cleanup --- src/heartbeat.rs | 59 +++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 63 ++---------------------------------------------- 2 files changed, 61 insertions(+), 61 deletions(-) create mode 100644 src/heartbeat.rs diff --git a/src/heartbeat.rs b/src/heartbeat.rs new file mode 100644 index 0000000..6bc4b4b --- /dev/null +++ b/src/heartbeat.rs @@ -0,0 +1,59 @@ +use serde::Serialize; + +#[derive(Serialize)] +struct HeartbeatInfo { + uuid: String, + players: usize, + maxplayers: usize, + port: u16, + map: String, + private: String, // Needs to be either "true" or "false" + version: String, + clientversion: String, + name: String, + modlist: String, + modstotalsize: usize, + modstotal: usize, + playerslist: String, + desc: String, +} + +pub async fn backend_heartbeat(config: std::sync::Arc) { + let info = HeartbeatInfo { + uuid: config.general.auth_key.clone().unwrap_or(String::from("Unknown name!")), + players: 0, // TODO: Implement this. Easiest would probably be to have the server send updates every so often + maxplayers: config.general.max_players, + port: config.general.port.unwrap_or(30814), + map: config.general.map.clone(), + private: if config.general.private { String::from("true") } else { String::from("false") }, + version: String::from("3.3.0"), // TODO: Don't hardcode this + clientversion: String::from("2.0"), // TODO: What? I think for now I can fill in 2.0 + name: config.general.name.clone(), + modlist: String::from("-"), // TODO: Implement this + modstotalsize: 0, // TODO: Implement this + modstotal: 0, // TODO: Implement this + playerslist: String::from("luuk-bepis;"), // TODO: Implement this + desc: config.general.description.clone(), + }; + + let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(30)); + loop { + interval.tick().await; + + heartbeat_post(&info).await; + } +} + +async fn heartbeat_post(heartbeat_info: &HeartbeatInfo) { + match reqwest::Client::new() + .post("https://backend.beammp.com/heartbeat") + .form(heartbeat_info) + .send() + .await + { + Ok(resp) => { + debug!("heartbeat response:\n{:?}", resp.text().await); + }, + Err(e) => error!("Heartbeat error occured: {e}"), + } +} diff --git a/src/main.rs b/src/main.rs index c808321..f9a1f41 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,10 +2,9 @@ #[macro_use] extern crate async_trait; #[macro_use] extern crate lazy_static; -use serde::Serialize; - mod server; mod config; +mod heartbeat; #[tokio::main] async fn main() { @@ -41,7 +40,7 @@ async fn main() { let user_config = std::sync::Arc::new(user_config); - tokio::spawn(backend_heartbeat(user_config.clone())); + tokio::spawn(heartbeat::backend_heartbeat(user_config.clone())); let mut server = server::Server::new(user_config) .await @@ -54,61 +53,3 @@ async fn main() { } } } - -#[derive(Serialize)] -struct HeartbeatInfo { - uuid: String, - players: usize, - maxplayers: usize, - port: u16, - map: String, - private: String, // Needs to be either "true" or "false" - version: String, - clientversion: String, - name: String, - modlist: String, - modstotalsize: usize, - modstotal: usize, - playerslist: String, - desc: String, -} - -async fn backend_heartbeat(config: std::sync::Arc) { - let info = HeartbeatInfo { - uuid: config.general.auth_key.clone().unwrap_or(String::from("Unknown name!")), - players: 0, // TODO: Implement this. Easiest would probably be to have the server send updates every so often - maxplayers: config.general.max_players, - port: config.general.port.unwrap_or(30814), - map: config.general.map.clone(), - private: if config.general.private { String::from("true") } else { String::from("false") }, - version: String::from("3.3.0"), - clientversion: String::from("2.0"), // TODO: What? I think for now I can fill in 2.0 - name: config.general.name.clone(), - modlist: String::from("-"), // TODO: Implement this. - modstotalsize: 0, // TODO: Implement this. - modstotal: 0, // TODO: Implement this. - playerslist: String::from("luuk-bepis;"), // TODO: Implement this - desc: config.general.description.clone(), - }; - - let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(30)); - loop { - interval.tick().await; - - heartbeat_post(&info).await; - } -} - -async fn heartbeat_post(heartbeat_info: &HeartbeatInfo) { - match reqwest::Client::new() - .post("https://backend.beammp.com/heartbeat") - .form(heartbeat_info) - .send() - .await - { - Ok(resp) => { - debug!("heartbeat response:\n{:?}", resp.text().await); - }, - Err(e) => error!("Heartbeat error occured: {e}"), - } -}