1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
//! 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]
pub fn force_panic() {
panic!("Force panicked!");
}
/// Returns true if built in debug mode
#[tauri::command]
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))
}
|