diff --git a/src/main.rs b/src/main.rs index c40b991..1fd7d86 100644 --- a/src/main.rs +++ b/src/main.rs @@ -486,47 +486,30 @@ async fn main_secondary(port: u16, mode: Mode) { async fn secondary_switch(port: u16) -> Option { let client = reqwest::Client::new(); - let Ok(response) = client - .get(format!("http://127.0.0.1:{}/meta", port)) - .send() - .await - else { - return None; - }; - let Ok(body) = response.text().await else { - return None; - }; + let body = client + .get(format!("http://127.0.0.1:{}/meta", port)).send().await.ok()? + .text().await.ok()?; + let compile_timestamp = serde_json::from_str::<'_, serde_json::Value>(&body).ok()? + .get("compile_timestamp")?.as_str()?.parse::().ok()?; - let Ok(value) = serde_json::from_str::<'_, serde_json::Value>(&body) else { + if timestamp::compile_time!() <= compile_timestamp { return None; - }; - let Some(compile_timestamp) = value.get("compile_timestamp").and_then(|v| v.as_str()) else { - return None; - }; + } - if let Ok(running) = compile_timestamp.parse::() && timestamp::compile_time!() > running - { - let Ok(response) = client - .get(format!("http://127.0.0.1:{}/panic?peaceful=true", port)) - .send() - .await - else { - return None; - }; + let _ = client.get(format!("http://127.0.0.1:{}/panic?peaceful=true", port)).send().await; + rocket::tokio::time::sleep(Duration::from_millis(3000)).await; - if response.status().as_u16() == 502 { - thread::sleep(Duration::from_millis(1500)); - let state = Lock::get_state(); - return match &state { - Lock::Single { .. } => { - logging!("UI", "Running in server mode."); - Some(state) - } - Lock::Secondary { .. } | Lock::Unknown => None, - }; + let state = Lock::get_state(); + match &state { + Lock::Single { .. } => { + logging!("UI", "Took over from legacy Terracotta."); + Some(state) } + Lock::Secondary { .. } | Lock::Unknown => { + logging!("UI", "Failed to take over from legacy Terracotta: global mutex hasn't been released after 3000ms."); + None + }, } - return None; } fn output_port(port: u16, file: String) {