X-Git-Url: http://git.euphorik.ch/index.cgi?a=blobdiff_plain;f=backend%2Fsrc%2Fvalheim_controller.rs;h=6fa6c7ff996bbf1397a6968b9c341cd0d1b577bf;hb=83993038d45c0d11c11417f9b47e19eb61e53928;hp=a89c4427edca82e3096f77a771a318e1c3546f34;hpb=bebcf77eb7aeecdeea5746ecc4da869a48c59dda;p=valheim_web.git diff --git a/backend/src/valheim_controller.rs b/backend/src/valheim_controller.rs index a89c442..6fa6c7f 100644 --- a/backend/src/valheim_controller.rs +++ b/backend/src/valheim_controller.rs @@ -75,6 +75,8 @@ fn format_byte_size(bytes: u64, precision: usize) -> String { } const VALHEIM_PROCESS_NAME: &str = "valheim_server"; +const STRING_BEFORE_CHARACTER_NAME: &str = "Got character ZDOID from"; +const STRING_BEFORE_NB_OF_CONNECTIONS: &str = "Connections"; #[cfg(target_os = "linux")] fn get_active_players() -> Vec { @@ -83,7 +85,7 @@ fn get_active_players() -> Vec { journal.seek_tail().unwrap(); - let mut number_of_connections = 0; + let mut number_of_connections = -1i32; let mut players : Vec = Vec::new(); loop { @@ -91,26 +93,28 @@ fn get_active_players() -> Vec { Ok(Some(entry)) => { if let (Some(unit), Some(mess)) = (entry.get("_SYSTEMD_UNIT"), entry.get("MESSAGE")) { if unit == "valheim.service" { - //"Got character ZDOID from {}" - if let Some(pos) = mess.find("Got character ZDOID from") { - let character_str = mess.get(pos+25..).unwrap(); + if let Some(pos) = mess.find(STRING_BEFORE_CHARACTER_NAME) { + let character_str = mess.get(pos+STRING_BEFORE_CHARACTER_NAME.len()+1..).unwrap(); if let Some(pos_end) = character_str.find(" : ") { let player_name = String::from(character_str.get(0..pos_end).unwrap()); if !players.contains(&player_name) { players.push(player_name); - if players.len() == number_of_connections { + if players.len() as i32 == number_of_connections { return players; } } } } - else if let Some(pos) = mess.find("Connections") { - let nb_of_connections_str = mess.get(pos+12..).unwrap(); + else if let Some(pos) = mess.find(STRING_BEFORE_NB_OF_CONNECTIONS) { + let nb_of_connections_str = mess.get(pos+STRING_BEFORE_NB_OF_CONNECTIONS.len()+1..).unwrap(); if let Some(pos_end) = nb_of_connections_str.find(' ') { - if let Ok(n) = nb_of_connections_str.get(0..pos_end).unwrap().parse() { - number_of_connections = n; - if players.len() >= number_of_connections { - return players; + if let Ok(n) = nb_of_connections_str.get(0..pos_end).unwrap().parse::() { + if number_of_connections == -1 { + number_of_connections = n; + + if players.len() as i32 >= number_of_connections { + return players; + } } } }