aboutsummaryrefslogtreecommitdiff
path: root/src-tauri/src/util.rs
diff options
context:
space:
mode:
authorGeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com>2023-05-13 02:51:29 +0200
committerGitHub <noreply@github.com>2023-05-13 02:51:29 +0200
commitd64f51f7cfb69407c8e5e572f7560e9c5e8dbbbe (patch)
tree56aa791868beda071f6fd951a844d2f1b81a9cc7 /src-tauri/src/util.rs
parent5d9a3380c8c1384a53ea2ad007a5cdfc7baabdfd (diff)
downloadFlightCore-d64f51f7cfb69407c8e5e572f7560e9c5e8dbbbe.tar.gz
FlightCore-d64f51f7cfb69407c8e5e572f7560e9c5e8dbbbe.zip
refactor: Move server browser fetch to util module (#352)
Diffstat (limited to 'src-tauri/src/util.rs')
-rw-r--r--src-tauri/src/util.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/src-tauri/src/util.rs b/src-tauri/src/util.rs
index 0c2c5da4..0802d68c 100644
--- a/src-tauri/src/util.rs
+++ b/src-tauri/src/util.rs
@@ -1,5 +1,15 @@
//! This module contains various utility/helper functions that do not fit into any other module
+use serde::{Deserialize, Serialize};
+
+use crate::constants::{APP_USER_AGENT, MASTER_SERVER_URL, SERVER_BROWSER_ENDPOINT};
+
+#[derive(Serialize, Deserialize, Debug, Clone)]
+pub struct NorthstarServer {
+ #[serde(rename = "playerCount")]
+ pub player_count: i32,
+}
+
/// This function's only use is to force a `panic!()`
// This must NOT be async to ensure crashing whole application.
#[tauri::command]
@@ -12,3 +22,41 @@ pub fn force_panic() {
pub async fn is_debug_mode() -> bool {
cfg!(debug_assertions)
}
+
+/// Fetches `/client/servers` endpoint from master server
+async fn fetch_server_list() -> Result<String, anyhow::Error> {
+ let url = format!("{MASTER_SERVER_URL}{SERVER_BROWSER_ENDPOINT}");
+ let client = reqwest::Client::new();
+ let res = client
+ .get(url)
+ .header(reqwest::header::USER_AGENT, APP_USER_AGENT)
+ .send()
+ .await?
+ .text()
+ .await?;
+
+ Ok(res)
+}
+
+/// Gets server and playercount from master server API
+#[tauri::command]
+pub async fn get_server_player_count() -> Result<(i32, usize), String> {
+ let res = match fetch_server_list().await {
+ Ok(res) => res,
+ Err(err) => return Err(err.to_string()),
+ };
+
+ let ns_servers: Vec<NorthstarServer> =
+ serde_json::from_str(&res).expect("JSON was not well-formatted");
+
+ // Get server count
+ let server_count = ns_servers.len();
+
+ // Sum up player count
+ let total_player_count: i32 = ns_servers.iter().map(|server| server.player_count).sum();
+
+ log::info!("total_player_count: {}", total_player_count);
+ log::info!("server_count: {}", server_count);
+
+ Ok((total_player_count, server_count))
+}