Bind beacon server only once
This commit is contained in:
parent
b7c65c877d
commit
e770804435
3 changed files with 22 additions and 21 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>,
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue