@@ -2,7 +2,6 @@ use antares::{Config, Controller, ShipConfig};
22use axum:: { extract:: State , routing:: post, Json , Router } ;
33use clap:: Parser ;
44use std:: { fs, net:: SocketAddr , process, sync:: Arc } ;
5- use tokio:: task;
65
76#[ derive( Parser ) ]
87#[ command( author, version, about) ]
@@ -33,10 +32,7 @@ async fn main() {
3332 let controller_bind_addr = config. simulation . controller_bind_addr . clone ( ) ;
3433 let controller = Arc :: new ( Controller :: new ( config) ) ;
3534
36- let controller_clone = Arc :: clone ( & controller) ;
37- task:: spawn ( async move {
38- controller_clone. run ( ) . await ;
39- } ) ;
35+ controller. run ( ) . await ;
4036
4137 let app = Router :: new ( )
4238 . route ( "/simulation/reset" , post ( reset_simulation) )
@@ -46,9 +42,17 @@ async fn main() {
4642 let addr: SocketAddr = controller_bind_addr. parse ( ) . unwrap ( ) ;
4743 let listener = tokio:: net:: TcpListener :: bind ( & addr) . await . unwrap ( ) ;
4844 println ! ( "🚢 Controller server running on {addr}" ) ;
49- axum:: serve ( listener, app. into_make_service ( ) )
50- . await
51- . unwrap ( ) ;
45+
46+ tokio:: select! {
47+ result = axum:: serve( listener, app. into_make_service( ) ) => {
48+ if let Err ( err) = result {
49+ eprintln!( "Server error: {err}" ) ;
50+ }
51+ }
52+ _ = tokio:: signal:: ctrl_c( ) => {
53+ println!( "🛑 Received Ctrl+C, shutting down..." ) ;
54+ }
55+ }
5256}
5357
5458async fn reset_simulation ( State ( controller) : State < Arc < Controller > > ) {
0 commit comments