use std::io;
use tokio::task::JoinHandle;
pub struct ServerRunner {
pub(crate) handles: Vec<JoinHandle<()>>,
}
impl ServerRunner {
pub async fn run(self) -> io::Result<()> {
println!("✅ Servers running. Press Ctrl+C to shut down.");
tokio::signal::ctrl_c().await?;
println!("\nShutdown signal received. Aborting server tasks...");
for handle in self.handles {
handle.abort();
}
Ok(())
}
}