From e770804435081a0b3f4d370aa1bd8517c0d7c4bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Sun, 12 May 2024 13:43:39 +0200 Subject: [PATCH] Bind `beacon` server only once --- beacon/src/client.rs | 8 +++++--- beacon/src/lib.rs | 29 +++++++++++------------------ debug/src/lib.rs | 6 ++++++ 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/beacon/src/client.rs b/beacon/src/client.rs index 44f6af52..cd5fec6d 100644 --- a/beacon/src/client.rs +++ b/beacon/src/client.rs @@ -110,9 +110,11 @@ async fn run( match send(&mut stream, output).await { Ok(()) => {} Err(error) => { - log::warn!( - "Error sending message to server: {error}" - ); + if error.kind() != io::ErrorKind::BrokenPipe { + log::warn!( + "Error sending message to server: {error}" + ); + } break; } } diff --git a/beacon/src/lib.rs b/beacon/src/lib.rs index ff2f36b0..d3d8c722 100644 --- a/beacon/src/lib.rs +++ b/beacon/src/lib.rs @@ -64,9 +64,9 @@ pub fn run() -> impl Stream { stream::channel(|mut output| async move { let mut buffer = Vec::new(); - loop { - let mut stream = match connect().await { - Ok(stream) => stream, + let server = loop { + match net::TcpListener::bind(client::SERVER_ADDRESS).await { + Ok(server) => break server, Err(error) => { if error.kind() == io::ErrorKind::AddrInUse { let _ = output @@ -75,11 +75,17 @@ pub fn run() -> impl Stream { }) .await; } - delay().await; - continue; } }; + }; + + loop { + let Ok((mut stream, _)) = server.accept().await else { + continue; + }; + + let _ = stream.set_nodelay(true); loop { match receive(&mut stream, &mut buffer).await { @@ -160,8 +166,6 @@ pub fn run() -> impl Stream { at: SystemTime::now(), }) .await; - - delay().await; break; } Err(Error::DecodingFailed(error)) => { @@ -173,17 +177,6 @@ pub fn run() -> impl Stream { }) } -async fn connect() -> Result { - let listener = net::TcpListener::bind(client::SERVER_ADDRESS).await?; - - let (stream, _) = listener.accept().await?; - - stream.set_nodelay(true)?; - stream.readable().await?; - - Ok(stream) -} - async fn receive( stream: &mut net::TcpStream, buffer: &mut Vec, diff --git a/debug/src/lib.rs b/debug/src/lib.rs index 125499e4..54814b4e 100644 --- a/debug/src/lib.rs +++ b/debug/src/lib.rs @@ -84,6 +84,12 @@ mod internal { .stdout(process::Stdio::null()) .stderr(process::Stdio::null()) .spawn(); + + if let Some(palette) = + LAST_PALETTE.read().expect("Read last palette").as_ref() + { + BEACON.log(client::Event::ThemeChanged(*palette)); + } } }