QoL connection management
This commit is contained in:
parent
f9d6c1c927
commit
c1bab5808b
1 changed files with 19 additions and 5 deletions
24
src/auth.rs
24
src/auth.rs
|
@ -82,7 +82,7 @@ impl AuthServer {
|
||||||
};
|
};
|
||||||
|
|
||||||
tracing::info!("AUTH: accepted connection from {}", remote_addr);
|
tracing::info!("AUTH: accepted connection from {}", remote_addr);
|
||||||
let conn = tokio::spawn(NetLoop::new(socket).run_error());
|
let conn = tokio::spawn(NetLoop::new(socket, must_exit.clone()).run_error());
|
||||||
|
|
||||||
|
|
||||||
connections.push(conn);
|
connections.push(conn);
|
||||||
|
@ -98,12 +98,14 @@ impl AuthServer {
|
||||||
|
|
||||||
struct NetLoop {
|
struct NetLoop {
|
||||||
stream: BufStream<TcpStream>,
|
stream: BufStream<TcpStream>,
|
||||||
|
stop: watch::Receiver<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NetLoop {
|
impl NetLoop {
|
||||||
fn new(stream: TcpStream) -> Self{
|
fn new(stream: TcpStream, stop: watch::Receiver<bool>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
stream: BufStream::new(stream),
|
stream: BufStream::new(stream),
|
||||||
|
stop,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,9 +120,21 @@ impl NetLoop {
|
||||||
let mut buff: Vec<u8> = Vec::new();
|
let mut buff: Vec<u8> = Vec::new();
|
||||||
loop {
|
loop {
|
||||||
buff.clear();
|
buff.clear();
|
||||||
self.stream.read_until(b'\n', &mut buff).await?;
|
tokio::select! {
|
||||||
let (input, cmd) = client_command(&buff).map_err(|_| anyhow!("Unable to parse command"))?;
|
read_res = self.stream.read_until(b'\n', &mut buff) => {
|
||||||
println!("input: {:?}, cmd: {:?}", input, cmd);
|
let bread = read_res?;
|
||||||
|
if bread == 0 {
|
||||||
|
tracing::info!("Reading buffer empty, connection has been closed. Exiting AUTH session.");
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
let (input, cmd) = client_command(&buff).map_err(|_| anyhow!("Unable to parse command"))?;
|
||||||
|
println!("input: {:?}, cmd: {:?}", input, cmd);
|
||||||
|
},
|
||||||
|
_ = self.stop.changed() => {
|
||||||
|
tracing::debug!("Server is stopping, quitting this runner");
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue