From f99fda9e1abe75af0af69e0cca6ea2f712df8832e3264b4fb8e7ef4396dcf9b8 Mon Sep 17 00:00:00 2001 From: raven <7156279+RavenX8@users.noreply.github.com> Date: Fri, 27 Dec 2024 18:58:45 -0500 Subject: [PATCH] - add: character service grpc server impl for getting the character list --- character-service/src/character_service.rs | 53 ++++++++++++++++++++++ character-service/src/main.rs | 13 ++++++ 2 files changed, 66 insertions(+) create mode 100644 character-service/src/character_service.rs diff --git a/character-service/src/character_service.rs b/character-service/src/character_service.rs new file mode 100644 index 0000000..77c3b67 --- /dev/null +++ b/character-service/src/character_service.rs @@ -0,0 +1,53 @@ +use tracing::debug; +use tonic::{Request, Response, Status}; +use tracing::field::debug; +use crate::character_service::character::character_service_server::CharacterService; +use crate::character_service::character::{Character, GetCharacterListRequest, GetCharacterListResponse}; + +pub mod character { + tonic::include_proto!("character"); +} + +#[derive(Default)] +pub struct MyCharacterService {} + +#[tonic::async_trait] +impl CharacterService for MyCharacterService { + async fn get_character_list(&self, request: Request) -> Result, Status> { + let req = request.into_inner(); + + let user_id = req.user_id; + debug!("Character list for User ID: {}", user_id); + + // Simulated database fetch for characters + let characters = vec![ + Character { + character_id: "1".to_string(), + name: "Warrior123".to_string(), + level: 1, + race: 1, + job: 111, + last_played: 1633017600, // Example timestamp + delete_time: 0, + face: 0, + hair: 0, + items: vec![], + }, + Character { + character_id: "2".to_string(), + name: "Mage123".to_string(), + level: 20, + race: 0, + job: 211, + last_played: 1633017600, // Example timestamp + delete_time: 0, + face: 0, + hair: 0, + items: vec![], + }, + ]; + + let response = GetCharacterListResponse { characters }; + Ok(Response::new(response)) + } +} \ No newline at end of file diff --git a/character-service/src/main.rs b/character-service/src/main.rs index c070283..9686d5e 100644 --- a/character-service/src/main.rs +++ b/character-service/src/main.rs @@ -1,3 +1,5 @@ +mod character_service; + use dotenv::dotenv; use std::collections::HashMap; use std::env; @@ -6,6 +8,8 @@ use tokio::{select, signal}; use tracing::{info, Level}; use utils::consul_registration; use utils::service_discovery::get_service_address; +use crate::character_service::character::character_service_server::CharacterServiceServer; +use crate::character_service::MyCharacterService; #[tokio::main] async fn main() -> Result<(), Box> { @@ -47,8 +51,17 @@ async fn main() -> Result<(), Box> { // Start health-check endpoint consul_registration::start_health_check(addr.as_str()).await?; + let full_addr = format!("{}:{}", &addr, port); + let address = full_addr.parse().expect("Invalid address"); let db_address = db_nodes.get(0).unwrap(); let db_url = format!("http://{}:{}", db_address.ServiceAddress, db_address.ServicePort); + let character_service = MyCharacterService::default(); + + tonic::transport::Server::builder() + .add_service(CharacterServiceServer::new(character_service)) + .serve(address) + .await?; + let mut sigterm_stream = signal::unix::signal(signal::unix::SignalKind::terminate())?; select! {