mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-07-18 02:51:14 +02:00
fix(tcp): use threads to allow multiple conns
This commit is contained in:
@@ -114,10 +114,7 @@ pub fn listen_for_commands_tcp(wm: Arc<Mutex<WindowManager>>, port: usize) {
|
|||||||
|
|
||||||
tracing::info!("listening for incoming tcp messages from {}", &addr);
|
tracing::info!("listening for incoming tcp messages from {}", &addr);
|
||||||
|
|
||||||
match read_commands_tcp(&wm, &mut stream, &addr) {
|
read_commands_tcp(&wm, &mut stream, &addr);
|
||||||
Ok(()) => {}
|
|
||||||
Err(error) => tracing::error!("{}", error),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Err(error) => {
|
Err(error) => {
|
||||||
tracing::error!("{}", error);
|
tracing::error!("{}", error);
|
||||||
@@ -939,20 +936,19 @@ pub fn read_commands_uds(wm: &Arc<Mutex<WindowManager>>, stream: UnixStream) ->
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read_commands_tcp(
|
pub fn read_commands_tcp(wm: &Arc<Mutex<WindowManager>>, stream: &mut TcpStream, addr: &str) {
|
||||||
wm: &Arc<Mutex<WindowManager>>,
|
let addr = addr.to_string();
|
||||||
stream: &mut TcpStream,
|
let wm = wm.clone();
|
||||||
addr: &str,
|
let stream = stream.try_clone().unwrap();
|
||||||
) -> Result<()> {
|
std::thread::spawn(move || -> Result<()> {
|
||||||
let mut stream = BufReader::new(stream);
|
let mut stream = BufReader::new(stream);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let mut buf = vec![0; 1024];
|
let mut buf = vec![0; 1024];
|
||||||
match stream.read(&mut buf) {
|
match stream.read(&mut buf) {
|
||||||
Err(..) => {
|
Err(..) => {
|
||||||
tracing::warn!("removing disconnected tcp client: {addr}");
|
tracing::warn!("removing disconnected tcp client: {addr}");
|
||||||
let mut connections = TCP_CONNECTIONS.lock();
|
let mut connections = TCP_CONNECTIONS.lock();
|
||||||
connections.remove(addr);
|
connections.remove(&addr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Ok(size) => {
|
Ok(size) => {
|
||||||
@@ -963,7 +959,7 @@ pub fn read_commands_tcp(
|
|||||||
} else {
|
} else {
|
||||||
tracing::warn!("client sent an invalid message, disconnecting: {addr}");
|
tracing::warn!("client sent an invalid message, disconnecting: {addr}");
|
||||||
let mut connections = TCP_CONNECTIONS.lock();
|
let mut connections = TCP_CONNECTIONS.lock();
|
||||||
connections.remove(addr);
|
connections.remove(&addr);
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -971,9 +967,9 @@ pub fn read_commands_tcp(
|
|||||||
|
|
||||||
if wm.is_paused {
|
if wm.is_paused {
|
||||||
return match message {
|
return match message {
|
||||||
SocketMessage::TogglePause | SocketMessage::State | SocketMessage::Stop => {
|
SocketMessage::TogglePause
|
||||||
Ok(wm.process_command(message)?)
|
| SocketMessage::State
|
||||||
}
|
| SocketMessage::Stop => Ok(wm.process_command(message)?),
|
||||||
_ => {
|
_ => {
|
||||||
tracing::trace!("ignoring while paused");
|
tracing::trace!("ignoring while paused");
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -991,4 +987,5 @@ pub fn read_commands_tcp(
|
|||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user