diff --git a/api-service/src/main.rs b/api-service/src/main.rs index 4d3dfce..6e883c0 100644 --- a/api-service/src/main.rs +++ b/api-service/src/main.rs @@ -67,15 +67,7 @@ async fn main() -> Result<(), Box> { info!("Starting REST API on {}:{}", addr, port); tokio::spawn(axum_gateway::serve_rest_api(grpc_client)); - let mut sigterm_stream = signal::unix::signal(signal::unix::SignalKind::terminate())?; - select! { - _ = signal::ctrl_c() => { - info!("Received SIGINT (Ctrl+C), shutting down..."); - }, - _ = sigterm_stream.recv() => { - info!("Received SIGTERM, shutting down..."); - }, - } + utils::signal_handler::wait_for_signal().await; consul_registration::deregister_service(&consul_url, service_id.as_str()) .await diff --git a/auth-service/src/main.rs b/auth-service/src/main.rs index 1999603..50b2803 100644 --- a/auth-service/src/main.rs +++ b/auth-service/src/main.rs @@ -78,15 +78,7 @@ async fn main() -> Result<(), Box> { .add_service(AuthServiceServer::new(auth_service)) .serve(address)); - let mut sigterm_stream = signal::unix::signal(signal::unix::SignalKind::terminate())?; - select! { - _ = signal::ctrl_c() => { - info!("Received SIGINT (Ctrl+C), shutting down..."); - }, - _ = sigterm_stream.recv() => { - info!("Received SIGTERM, shutting down..."); - }, - } + utils::signal_handler::wait_for_signal().await; consul_registration::deregister_service(&consul_url, service_id.as_str()).await.expect(""); info!("service {} deregistered", service_name); diff --git a/character-service/src/main.rs b/character-service/src/main.rs index 92ffb9f..c4f184b 100644 --- a/character-service/src/main.rs +++ b/character-service/src/main.rs @@ -63,15 +63,7 @@ async fn main() -> Result<(), Box> { .await?; - let mut sigterm_stream = signal::unix::signal(signal::unix::SignalKind::terminate())?; - select! { - _ = signal::ctrl_c() => { - info!("Received SIGINT (Ctrl+C), shutting down..."); - }, - _ = sigterm_stream.recv() => { - info!("Received SIGTERM, shutting down..."); - }, - } + utils::signal_handler::wait_for_signal().await; consul_registration::deregister_service(&consul_url, service_id.as_str()).await.expect(""); Ok(()) diff --git a/database-service/src/main.rs b/database-service/src/main.rs index 62a0473..e847f9e 100644 --- a/database-service/src/main.rs +++ b/database-service/src/main.rs @@ -73,16 +73,7 @@ async fn main() -> Result<(), Box> { .add_service(CharacterServiceServer::new(my_service)) .serve(address)); - let mut sigterm_stream = signal::unix::signal(signal::unix::SignalKind::terminate())?; - select! { - _ = signal::ctrl_c() => { - info!("Received SIGINT (Ctrl+C), shutting down..."); - }, - _ = sigterm_stream.recv() => { - info!("Received SIGTERM, shutting down..."); - }, - } - + utils::signal_handler::wait_for_signal().await; consul_registration::deregister_service(&consul_url, service_id.as_str()).await.expect(""); info!("service {} deregistered", service_name); Ok(()) diff --git a/packet-service/src/handlers/character.rs b/packet-service/src/handlers/character.rs index 5473dbe..576c222 100644 --- a/packet-service/src/handlers/character.rs +++ b/packet-service/src/handlers/character.rs @@ -110,7 +110,6 @@ pub(crate) async fn handle_delete_char_req(stream: &mut TcpStream, packet: Packe } let mut character_client = character_client.lock().await; - // character_client.delete_character(request.is_delete, request.char_id, request.name); character_client.delete_character(&user_id.to_string(), &request.char_id.to_string()); let character_name = request.name; @@ -134,7 +133,7 @@ pub(crate) async fn handle_select_char_req(stream: &mut TcpStream, packet: Packe } let mut character_client = character_client.lock().await; - // character_client.get_character(&user_id.to_string(), request.char_id); + character_client.get_character(&user_id.to_string(), request.char_id); let mut equipped_item_list: [EquippedItem; (MAX_VISIBLE_ITEMS as usize)] = core::array::from_fn(|i| EquippedItem::default()); let mut effect_list: [StatusEffect; (MAX_STATUS_EFFECTS as usize)] = core::array::from_fn(|i| StatusEffect::default()); let mut hotbar_list: [HotbarItem; (MAX_HOTBAR_ITEMS as usize)] = core::array::from_fn(|i| HotbarItem::default()); diff --git a/packet-service/src/main.rs b/packet-service/src/main.rs index 34bce3b..785a201 100644 --- a/packet-service/src/main.rs +++ b/packet-service/src/main.rs @@ -131,15 +131,7 @@ async fn main() -> Result<(), Box> { } }); - let mut sigterm_stream = signal::unix::signal(signal::unix::SignalKind::terminate())?; - select! { - _ = signal::ctrl_c() => { - info!("Received SIGINT (Ctrl+C), shutting down..."); - }, - _ = sigterm_stream.recv() => { - info!("Received SIGTERM, shutting down..."); - }, - } + utils::signal_handler::wait_for_signal().await; consul_registration::deregister_service(&consul_url, service_id.as_str()).await.expect(""); info!("service {} deregistered", service_name); diff --git a/session-service/src/main.rs b/session-service/src/main.rs index b0d4b3f..8a3720c 100644 --- a/session-service/src/main.rs +++ b/session-service/src/main.rs @@ -68,15 +68,7 @@ async fn main() -> Result<(), Box> { .add_service(SessionServiceServer::new(session_service)) .serve(address)); - let mut sigterm_stream = signal::unix::signal(signal::unix::SignalKind::terminate())?; - select! { - _ = signal::ctrl_c() => { - info!("Received SIGINT (Ctrl+C), shutting down..."); - }, - _ = sigterm_stream.recv() => { - info!("Received SIGTERM, shutting down..."); - }, - } + utils::signal_handler::wait_for_signal().await; consul_registration::deregister_service(&consul_url, service_id.as_str()).await.expect(""); Ok(()) diff --git a/utils/Cargo.toml b/utils/Cargo.toml index 3f3c884..2a32ba9 100644 --- a/utils/Cargo.toml +++ b/utils/Cargo.toml @@ -10,7 +10,7 @@ tracing = "0.1" rand = "0.9.0-beta.1" uuid = { version = "1.11.0", features = ["v4"] } warp = "0.3.7" -tokio = "1.41.1" +tokio = { version = "1.41.1", features = ["full"] } bincode = { version = "2.0.0-rc.3", features = ["derive", "serde"] } redis = "0.27.5" deadpool-redis = "0.18.0" diff --git a/utils/src/lib.rs b/utils/src/lib.rs index 1aa4859..87dd3b3 100644 --- a/utils/src/lib.rs +++ b/utils/src/lib.rs @@ -2,3 +2,4 @@ pub mod consul_registration; pub mod service_discovery; pub mod null_string; pub mod redis_cache; +pub mod signal_handler; diff --git a/utils/src/signal_handler.rs b/utils/src/signal_handler.rs new file mode 100644 index 0000000..b641096 --- /dev/null +++ b/utils/src/signal_handler.rs @@ -0,0 +1,27 @@ +use tokio::{select, signal}; +use tracing::info; + +pub async fn wait_for_signal() { + select! { + _ = signal::ctrl_c() => { + info!("Received SIGINT (Ctrl+C), shutting down..."); + }, + _ = terminate_signal() => { + info!("Received termination signal, shutting down..."); + }, + } +} + +async fn terminate_signal() { + #[cfg(unix)] + { + use tokio::signal::unix::{signal, SignalKind}; + let mut sigterm = signal(SignalKind::terminate()).expect("Failed to set up SIGTERM handler"); + sigterm.recv().await; + } + + #[cfg(windows)] + { + signal::ctrl_break().await.expect("Failed to set up CTRL_BREAK handler"); + } +} \ No newline at end of file diff --git a/world-service/src/main.rs b/world-service/src/main.rs index 5596cdc..6b01d3b 100644 --- a/world-service/src/main.rs +++ b/world-service/src/main.rs @@ -50,16 +50,7 @@ async fn main() -> Result<(), Box> { let db_address = db_nodes.get(0).unwrap(); let db_url = format!("http://{}:{}", db_address.ServiceAddress, db_address.ServicePort); - let mut sigterm_stream = signal::unix::signal(signal::unix::SignalKind::terminate())?; - select! { - _ = signal::ctrl_c() => { - info!("Received SIGINT (Ctrl+C), shutting down..."); - }, - _ = sigterm_stream.recv() => { - info!("Received SIGTERM, shutting down..."); - }, - } - + utils::signal_handler::wait_for_signal().await; consul_registration::deregister_service(&consul_url, service_id.as_str()).await.expect(""); Ok(()) }