stand up TCPServer interfaces from config file

This commit is contained in:
sigil-03 2025-11-26 10:58:31 -07:00
parent a127562b16
commit 99c9b543f2

View file

@ -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<InterfaceConfig>,
}
#[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");
}