- add: select character now actually sends the character data to the client

- add: character data response when a character is requested from the service
This commit is contained in:
2025-01-08 03:46:08 -05:00
parent 6d35d15ac3
commit 32fe2d65a7
6 changed files with 209 additions and 53 deletions

View File

@@ -4,8 +4,8 @@ use tonic::{Request, Response, Status};
use utils::null_string::NullTerminatedString;
use crate::character_db_client::CharacterDbClient;
use crate::character_service::character::character_service_server::CharacterService;
use crate::character_service::character::{CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse, Empty, GetCharacterListRequest, GetCharacterListResponse, GetCharacterRequest};
use crate::character_service::character_common::{Character, Looks, Stats};
use crate::character_service::character::{CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse, Empty, GetCharacterListRequest, GetCharacterListResponse, GetCharacterRequest, GetCharacterResponse};
use crate::character_service::character_common::{Character, CharacterFull, Looks, Stats};
pub mod character_common {
tonic::include_proto!("character_common");
@@ -71,9 +71,21 @@ impl CharacterService for MyCharacterService {
Ok(Response::new(response))
}
async fn get_character(&self, request: Request<GetCharacterRequest>) -> Result<Response<Empty>, Status> {
async fn get_character(&self, request: Request<GetCharacterRequest>) -> Result<Response<GetCharacterResponse>, Status> {
let req = request.into_inner();
debug!("{:?}", req);
Ok(Response::new(Empty{}))
let get_character_response = self.character_db_client.as_ref().clone().get_character(&req.user_id, &req.char_id).await.map_err(|_| Status::not_found("Character not found"))?;
let character = CharacterFull {
character_id: get_character_response.id.to_string(),
name: get_character_response.name.to_string(),
position: serde_json::from_str(&get_character_response.position).unwrap(),
looks: serde_json::from_str(&get_character_response.looks).unwrap(),
stats: serde_json::from_str(&get_character_response.stats).unwrap(),
items: serde_json::from_str(&get_character_response.inventory).unwrap(),
};
let response = GetCharacterResponse { character: Some(character) };
Ok(Response::new(response))
}
}