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},
|
|
|
|
|
};
|
|
|
|
|
|
2024-05-05 15:07:08 +02:00
|
|
|
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();
|
|
|
|
|
|
2024-05-05 15:07:08 +02:00
|
|
|
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) {
|
2024-05-05 15:07:08 +02:00
|
|
|
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
|
|
|
}
|