diff --git a/src/main.rs b/src/main.rs index 3fcab95..40ef3fc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,11 @@ use tokio::fs; - -use serde::{Serialize, Deserialize}; use clap::Parser; +use serde::{Deserialize, Serialize}; + +// RETICULUM INCLUDES +use reticulum::iface::tcp_server::TcpServer; +use reticulum::transport::{Transport, TransportConfig}; #[derive(Serialize, Deserialize, Debug)] struct TcpServerConfig { @@ -11,7 +14,7 @@ struct TcpServerConfig { #[derive(Serialize, Deserialize, Debug)] enum InterfaceConfig { - TcpServer(TcpServerConfig) + TcpServer(TcpServerConfig), } #[derive(Serialize, Deserialize, Debug)] @@ -19,7 +22,6 @@ struct Config { interfaces: Vec, } - #[derive(Parser)] struct Cli { #[arg(short, long)] @@ -34,10 +36,28 @@ async fn main() { let cli = Cli::parse(); - let config: Config = toml::from_str(&fs::read_to_string(cli.config_file).await.unwrap()).unwrap(); + let config: Config = + toml::from_str(&fs::read_to_string(cli.config_file).await.unwrap()).unwrap(); println!("{config:?}"); + // set up the reticulum transport + let transport = Transport::new(TransportConfig::default()); + + // set up interfaces + for iface_config in config.interfaces { + match iface_config { + InterfaceConfig::TcpServer(cfg) => { + let _ = transport.iface_manager().lock().await.spawn( + TcpServer::new(cfg.bind_addr, transport.iface_manager()), + TcpServer::spawn, + ); + } + } + } + + // run until exit + let _ = tokio::signal::ctrl_c().await; log::info!("exit"); }