From bbde3c1b6075af77bc511397b3ea9f1e8cfebdf8 Mon Sep 17 00:00:00 2001 From: GW_MC <72297530+GWMCwing@users.noreply.github.com> Date: Sat, 18 Apr 2026 07:31:29 +0000 Subject: [PATCH] feat: Refactor agent server initialization to support parallel api server --- apps/nxmesh-master/src/service/mod.rs | 43 +++++++++++++++++++++------ 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/apps/nxmesh-master/src/service/mod.rs b/apps/nxmesh-master/src/service/mod.rs index a3ade80..1599a17 100644 --- a/apps/nxmesh-master/src/service/mod.rs +++ b/apps/nxmesh-master/src/service/mod.rs @@ -1,4 +1,6 @@ -use std::sync::Arc; +use std::{net::ToSocketAddrs, sync::Arc}; + +use tracing::info; use crate::{connector::agent::AgentConnectorTrait, service::certificate::CertificateService}; @@ -26,15 +28,38 @@ pub async fn start_master_server( println!("Certificate generated and stored successfully."); } - // Initialize agent connector - let mut agent_connector = crate::connector::agent::AgentConnector::new(Box::new( - crate::connector::agent::ssh::SshAgentConnector::new(settings.clone())?, - )); + let ssh_connector = crate::connector::agent::ssh::SshAgentConnector::new(settings.clone())?; + let cert_service_for_agent = cert_service.clone(); + let settings_for_agent = settings.clone(); + let connection_for_agent = db_connection.clone(); - // Start the agent server - agent_connector - .start_server(&settings, cert_service, db_connection) - .await?; + tokio::spawn(async move { + let mut connector = ssh_connector; + tracing::info!("Starting agent server..."); + if let Err(e) = connector + .start_server( + &settings_for_agent, + cert_service_for_agent, + connection_for_agent, + ) + .await + { + tracing::error!("Agent server failed: {}", e); + } else { + tracing::info!("Agent server stopped."); + } + }); + + let axum_router = crate::routes::get_root_router().await; + + // Start the HTTP server + let addr = format!("{}:{}", settings.server.bind_address, settings.server.port) + .to_socket_addrs()? + .next() + .ok_or("Invalid bind address")?; + let listener = tokio::net::TcpListener::bind(addr).await?; + info!("Web/API server is listening on {}", addr); + axum::serve(listener, axum_router).await?; Ok(()) }