- add: character service grpc server impl for getting the character list
This commit is contained in:
53
character-service/src/character_service.rs
Normal file
53
character-service/src/character_service.rs
Normal file
@@ -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<GetCharacterListRequest>) -> Result<Response<GetCharacterListResponse>, 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))
|
||||
}
|
||||
}
|
||||
@@ -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<dyn std::error::Error>> {
|
||||
@@ -47,8 +51,17 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
// 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! {
|
||||
|
||||
Reference in New Issue
Block a user