Bind beacon server only once

This commit is contained in:
Héctor Ramón Jiménez 2024-05-12 13:43:39 +02:00
parent b7c65c877d
commit e770804435
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
3 changed files with 22 additions and 21 deletions

View file

@ -110,9 +110,11 @@ async fn run(
match send(&mut stream, output).await { match send(&mut stream, output).await {
Ok(()) => {} Ok(()) => {}
Err(error) => { Err(error) => {
log::warn!( if error.kind() != io::ErrorKind::BrokenPipe {
"Error sending message to server: {error}" log::warn!(
); "Error sending message to server: {error}"
);
}
break; break;
} }
} }

View file

@ -64,9 +64,9 @@ pub fn run() -> impl Stream<Item = Event> {
stream::channel(|mut output| async move { stream::channel(|mut output| async move {
let mut buffer = Vec::new(); let mut buffer = Vec::new();
loop { let server = loop {
let mut stream = match connect().await { match net::TcpListener::bind(client::SERVER_ADDRESS).await {
Ok(stream) => stream, Ok(server) => break server,
Err(error) => { Err(error) => {
if error.kind() == io::ErrorKind::AddrInUse { if error.kind() == io::ErrorKind::AddrInUse {
let _ = output let _ = output
@ -75,11 +75,17 @@ pub fn run() -> impl Stream<Item = Event> {
}) })
.await; .await;
} }
delay().await; delay().await;
continue;
} }
}; };
};
loop {
let Ok((mut stream, _)) = server.accept().await else {
continue;
};
let _ = stream.set_nodelay(true);
loop { loop {
match receive(&mut stream, &mut buffer).await { match receive(&mut stream, &mut buffer).await {
@ -160,8 +166,6 @@ pub fn run() -> impl Stream<Item = Event> {
at: SystemTime::now(), at: SystemTime::now(),
}) })
.await; .await;
delay().await;
break; break;
} }
Err(Error::DecodingFailed(error)) => { Err(Error::DecodingFailed(error)) => {
@ -173,17 +177,6 @@ pub fn run() -> impl Stream<Item = Event> {
}) })
} }
async fn connect() -> Result<net::TcpStream, io::Error> {
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( async fn receive(
stream: &mut net::TcpStream, stream: &mut net::TcpStream,
buffer: &mut Vec<u8>, buffer: &mut Vec<u8>,

View file

@ -84,6 +84,12 @@ mod internal {
.stdout(process::Stdio::null()) .stdout(process::Stdio::null())
.stderr(process::Stdio::null()) .stderr(process::Stdio::null())
.spawn(); .spawn();
if let Some(palette) =
LAST_PALETTE.read().expect("Read last palette").as_ref()
{
BEACON.log(client::Event::ThemeChanged(*palette));
}
} }
} }