diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/src/main.rs b/src/main.rs index 929815f..89f7709 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,7 +10,6 @@ use std::process; use std::sync::Arc; use std::sync::RwLock; use std::time::Duration; -use tokio::task::{Id, JoinSet}; use tracing::{debug, error, info, warn}; type StateMap = Arc<RwLock<HashMap<String, PrinterState>>>; @@ -41,9 +40,6 @@ async fn main() { process::exit(1); }); let state: StateMap = Arc::new(RwLock::new(HashMap::new())); - let mut tasks = JoinSet::new(); - let mut task_names: HashMap<Id, String> = HashMap::new(); - for printer in config.printers { let state = state.clone(); match printer { @@ -53,9 +49,12 @@ async fn main() { api_key, } => { info!(name, host, "Found Prusa"); - let task_name = name.clone(); - let handle = tasks.spawn(poll_prusa(name, host, api_key, state)); - task_names.insert(handle.id(), task_name); + tokio::spawn(async move { + match tokio::spawn(poll_prusa(name.clone(), host, api_key, state)).await { + Ok(()) => warn!(name, "Prusa polling task exited unexpectedly"), + Err(e) => error!(name, error = ?e, "Prusa polling task panicked"), + } + }); } Printer::Bambu { name, @@ -64,32 +63,24 @@ async fn main() { access_code, } => { info!(name, host, "Found Bambu"); - let task_name = name.clone(); - let handle = tasks.spawn(poll_bambu(name, host, serial_number, access_code, state)); - task_names.insert(handle.id(), task_name); + tokio::spawn(async move { + match tokio::spawn(poll_bambu( + name.clone(), + host, + serial_number, + access_code, + state, + )) + .await + { + Ok(()) => warn!(name, "Bambu polling task exited unexpectedly"), + Err(e) => error!(name, error = ?e, "Bambu polling task panicked"), + } + }); } } } - tokio::spawn(async move { - while let Some(result) = tasks.join_next_with_id().await { - match result { - Ok((id, ())) => { - let name = task_names.get(&id).map(String::as_str).unwrap_or("unknown"); - warn!(name, "Printer polling task exited unexpectedly"); - } - Err(e) => { - let name = task_names - .get(&e.id()) - .map(String::as_str) - .unwrap_or("unknown"); - error!(name, error = ?e, "A printer polling task panicked"); - } - } - } - warn!("All printer polling tasks have exited"); - }); - let app = Router::new().route("/", get(root)).with_state(state); let listener = tokio::net::TcpListener::bind(&args.bind) |
