radomctld/src/main.rs

79 lines
2.1 KiB
Rust
Raw Normal View History

2024-05-03 16:16:24 +02:00
mod rotctl;
2024-05-05 14:42:25 +02:00
use tokio::{
self,
io::{AsyncBufReadExt, AsyncWriteExt, BufStream},
net::{TcpListener, TcpStream},
};
use rotctl::Command;
2024-05-05 14:42:25 +02:00
use std::io;
async fn process_socket(socket: TcpStream) {
let mut stream = BufStream::new(socket);
let mut line = String::new();
let mut az = 0.0;
let mut el = 0.0;
2024-05-05 14:42:25 +02:00
loop {
if let Ok(n) = stream.read_line(&mut line).await {
if n == 0 {
return;
}
println!("> {}", line);
match rotctl::parse_command(&line) {
Ok(cmd) => match cmd {
Command::GetPos => {
stream
.write_all(format!("{}\n{}\n", az, el).as_bytes())
.await
.unwrap();
stream.flush().await.unwrap();
}
Command::SetPos(new_az, new_el) => {
az = new_az;
el = new_el;
stream.write_all("RPRT 0\n".as_bytes()).await.unwrap();
stream.flush().await.unwrap();
}
Command::Stop => {
stream.write_all("RPRT 0\n".as_bytes()).await.unwrap();
stream.flush().await.unwrap();
}
Command::Exit => {
stream.write_all("RPRT 0\n".as_bytes()).await.unwrap();
stream.flush().await.unwrap();
return;
}
_ => {}
},
2024-05-05 14:42:25 +02:00
Err(msg) => {
stream.write_all(msg.as_bytes()).await.unwrap();
stream.flush().await.unwrap();
}
}
line.clear();
} else {
return;
}
}
}
#[tokio::main]
async fn main() -> io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
loop {
let (socket, _) = listener.accept().await?;
tokio::spawn(async move {
process_socket(socket).await;
});
}
2024-05-03 16:16:24 +02:00
}