use color_eyre::eyre; use tokio::net::TcpListener; use tracing::info; use crate::config::Config; use crate::device_storage::DeviceStorage; use crate::tcp::receive_device_update_events; use crate::tcp::registration::receive_register_events; use crate::web::app; pub mod device_storage; pub mod tcp; pub mod time; pub mod web; pub mod config; #[derive(Clone)] pub struct AppState { pub device_storage: DeviceStorage, pub device_change_events: tokio::sync::broadcast::Sender, } pub async fn run_tcp(state: AppState, config: &Config) -> eyre::Result<()> { info!("Starting TCP Server - port {}", config.tcp_port); let listener = TcpListener::bind(format!("0.0.0.0:{}", config.tcp_port)).await?; tokio::try_join!( receive_register_events(listener, state.clone()), receive_device_update_events(state) )?; Ok(()) } pub async fn run_http(state: AppState, config: &Config) -> eyre::Result<()> { let app = app(state, config).await?; info!("Starting Web Server - port {}", config.web_port); let listener = TcpListener::bind(format!("0.0.0.0:{}", config.web_port)).await?; axum::serve(listener, app).await?; Ok(()) }