From bd1f2d414d08c858fd41d37aac9771e87a133830 Mon Sep 17 00:00:00 2001 From: Joshua Higgins Date: Thu, 4 Dec 2025 21:53:13 -0500 Subject: [PATCH] feat: update spec for GAME:TERMINATE --- src/main.rs | 66 ++++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/src/main.rs b/src/main.rs index c094da0..85fd991 100644 --- a/src/main.rs +++ b/src/main.rs @@ -639,43 +639,41 @@ async fn handle_connection( continue; } - let match_id_request = get_current_watching_match(&matches, addr).await; + let match_id_parse = text.split(":").collect::>()[2].parse::(); + if match_id_parse.is_err() { let _ = send(&tx, "ERROR:INVALID:TERMINATE"); continue; } - match match_id_request { - Some(match_id) => { - let match_guard = matches.read().await; - let the_match = match_guard.get(&match_id).unwrap().read().await; - if let Some(wait_thread) = &the_match.wait_thread { - wait_thread.abort(); - } - let player1_addr = the_match.player1; - let player2_addr = the_match.player2; - broadcast_message(&the_match.viewers, &observers, "GAME:TERMINATED").await; - drop(the_match); - drop(match_guard); + let match_guard = matches.read().await; + let match_id_request = match_guard.get(&match_id_parse.clone()?).unwrap(); + let the_match = match_id_request.read().await; - let clients_guard = clients.write().await; - - let mut player1 = clients_guard.get(&player1_addr).unwrap().write().await; - player1.current_match = None; - player1.color = Color::None; - let _ = send(&player1.connection, "GAME:TERMINATED"); - drop(player1); - - let mut player2 = clients_guard.get(&player2_addr).unwrap().write().await; - player2.current_match = None; - player2.color = Color::None; - let _ = send(&player2.connection, "GAME:TERMINATED"); - drop(player2); - - drop(clients_guard); - - matches.write().await.remove(&match_id); - }, - None => { - let _ = send(&tx, "ERROR:INVALID:TERMINATE"); - } + if let Some(wait_thread) = &the_match.wait_thread { + wait_thread.abort(); } + + let player1_addr = the_match.player1; + let player2_addr = the_match.player2; + broadcast_message(&the_match.viewers, &observers, "GAME:TERMINATED").await; + + drop(the_match); + drop(match_guard); + + let clients_guard = clients.write().await; + + let mut player1 = clients_guard.get(&player1_addr).unwrap().write().await; + player1.current_match = None; + player1.color = Color::None; + let _ = send(&player1.connection, "GAME:TERMINATED"); + drop(player1); + + let mut player2 = clients_guard.get(&player2_addr).unwrap().write().await; + player2.current_match = None; + player2.color = Color::None; + let _ = send(&player2.connection, "GAME:TERMINATED"); + drop(player2); + + drop(clients_guard); + + matches.write().await.remove(&match_id_parse?); } else if text == "TOURNAMENT:START" {