fix: ignore ghost spectators

This commit is contained in:
2025-12-03 22:05:17 -05:00
Unverified
parent 86fffac565
commit ccd48d0d44

View File

@@ -11,7 +11,7 @@ use std::net::SocketAddr;
use std::num::ParseIntError; use std::num::ParseIntError;
use std::process::abort; use std::process::abort;
use std::sync::Arc; use std::sync::Arc;
use tokio::io::AsyncReadExt; use tokio::io::{AsyncReadExt, AsyncWriteExt};
use tokio::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
use tokio::sync::mpsc::error::SendError; use tokio::sync::mpsc::error::SendError;
use tokio::sync::mpsc::UnboundedSender; use tokio::sync::mpsc::UnboundedSender;
@@ -796,10 +796,10 @@ async fn handle_connection(
let client = clients.write().await.remove(&addr).unwrap(); let client = clients.write().await.remove(&addr).unwrap();
let username = client.read().await.username.clone(); let username = client.read().await.username.clone();
usernames.write().await.remove(&username); usernames.write().await.remove(&username);
} else {
observers.write().await.remove(&addr);
} }
observers.write().await.remove(&addr);
let mut admin_guard = admin.write().await; let mut admin_guard = admin.write().await;
if let Some(admin_addr) = *admin_guard { if let Some(admin_addr) = *admin_guard {
if admin_addr == addr { if admin_addr == addr {
@@ -815,7 +815,10 @@ async fn handle_connection(
async fn broadcast_message(addrs: &Vec<SocketAddr>, observers: &Observers, msg: &str) { async fn broadcast_message(addrs: &Vec<SocketAddr>, observers: &Observers, msg: &str) {
for addr in addrs { for addr in addrs {
let _ = send(observers.read().await.get(addr).unwrap(), msg); let observers_guard = observers.read().await;
let tx = observers_guard.get(addr);
if tx.is_none() { continue; }
let _ = send(tx.unwrap(), msg);
} }
} }