feat(backend/control-box): add a socket for the box
This commit is contained in:
parent
dfbaf2fd65
commit
077a186f10
1 changed files with 44 additions and 0 deletions
|
@ -9,6 +9,12 @@ use tokio::task;
|
|||
use tokio::time::{sleep, Duration};
|
||||
use tower_http::cors::{Any, CorsLayer};
|
||||
|
||||
use axum::extract::State;
|
||||
use serde::Deserialize;
|
||||
use tokio::io::AsyncBufReadExt;
|
||||
use tokio::io::BufReader;
|
||||
use tokio::net::TcpListener;
|
||||
|
||||
pub fn create_router() -> Router {
|
||||
let db = model::make_db();
|
||||
|
||||
|
@ -43,6 +49,44 @@ pub fn create_router() -> Router {
|
|||
}
|
||||
});
|
||||
|
||||
let db_listener = db.clone();
|
||||
task::spawn(async move {
|
||||
//TODO: parametrisation
|
||||
let listener = TcpListener::bind("10.10.10.1:1235")
|
||||
.await
|
||||
.expect("Failed to listen for direct connection.");
|
||||
|
||||
loop {
|
||||
match listener.accept().await {
|
||||
Ok((socket, _)) => {
|
||||
let db_socket = db_listener.clone();
|
||||
let mut buf_reader = BufReader::new(socket);
|
||||
let mut buf = String::new();
|
||||
task::spawn(async move {
|
||||
loop {
|
||||
buf.clear();
|
||||
let _ = buf_reader.read_line(&mut buf).await;
|
||||
match model::DMXBeamChange::deserialize(
|
||||
&mut serde_json::Deserializer::from_str(&buf),
|
||||
) {
|
||||
Ok(data) => handler::edit_motor_value_handler(
|
||||
State(db_socket.clone()),
|
||||
axum::Json(data),
|
||||
)
|
||||
.await
|
||||
.unwrap_or(()),
|
||||
Err(e) => tracing::debug!("Error reading incoming data: {e:?}"),
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
Err(e) => {
|
||||
task::spawn(async move { tracing::debug!("Failed to get client: {e:?}") })
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
Router::new()
|
||||
.route("/api/healthcheck", get(handler::healthcheck_handler))
|
||||
.route(
|
||||
|
|
Loading…
Reference in a new issue