- chore: ran cargo fix on the codebase
This commit is contained in:
@@ -4,13 +4,22 @@ fn main() {
|
||||
.build_server(true) // Generate gRPC server code
|
||||
.compile_well_known_types(true)
|
||||
.type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
|
||||
.compile_protos(&["../proto/character_common.proto", "../proto/character.proto"], &["../proto"])
|
||||
.compile_protos(
|
||||
&[
|
||||
"../proto/character_common.proto",
|
||||
"../proto/character.proto",
|
||||
],
|
||||
&["../proto"],
|
||||
)
|
||||
.unwrap_or_else(|e| panic!("Failed to compile protos {:?}", e));
|
||||
|
||||
|
||||
// gRPC Client code
|
||||
tonic_build::configure()
|
||||
.build_server(false) // Generate gRPC client code
|
||||
.compile_well_known_types(true)
|
||||
.compile_protos(&["../proto/character_db_api.proto", "../proto/auth.proto"], &["../proto"])
|
||||
.compile_protos(
|
||||
&["../proto/character_db_api.proto", "../proto/auth.proto"],
|
||||
&["../proto"],
|
||||
)
|
||||
.unwrap_or_else(|e| panic!("Failed to compile protos {:?}", e));
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
use tonic::transport::Channel;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use crate::database::character_db_service_client::CharacterDbServiceClient;
|
||||
use crate::database::{CharacterRequest, Character, CharacterListRequest, CharacterListResponse, CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse};
|
||||
use crate::database::{
|
||||
Character, CharacterListRequest, CharacterListResponse, CharacterRequest,
|
||||
CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest,
|
||||
DeleteCharacterResponse,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tonic::transport::Channel;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct CharacterDbClient {
|
||||
@@ -71,7 +75,11 @@ impl CharacterDbClient {
|
||||
Ok(Self { client })
|
||||
}
|
||||
|
||||
pub async fn get_character(&mut self, user_id: &str, char_id: &str) -> Result<Character, Box<dyn std::error::Error>> {
|
||||
pub async fn get_character(
|
||||
&mut self,
|
||||
user_id: &str,
|
||||
char_id: &str,
|
||||
) -> Result<Character, Box<dyn std::error::Error>> {
|
||||
let request = tonic::Request::new(CharacterRequest {
|
||||
user_id: user_id.parse().unwrap(),
|
||||
character_id: char_id.parse().unwrap(),
|
||||
@@ -80,7 +88,10 @@ impl CharacterDbClient {
|
||||
Ok(response.into_inner())
|
||||
}
|
||||
|
||||
pub async fn get_character_list(&mut self, user_id: &str) -> Result<CharacterListResponse, Box<dyn std::error::Error>> {
|
||||
pub async fn get_character_list(
|
||||
&mut self,
|
||||
user_id: &str,
|
||||
) -> Result<CharacterListResponse, Box<dyn std::error::Error>> {
|
||||
let request = tonic::Request::new(CharacterListRequest {
|
||||
user_id: user_id.parse().unwrap(),
|
||||
});
|
||||
@@ -88,12 +99,20 @@ impl CharacterDbClient {
|
||||
Ok(response.into_inner())
|
||||
}
|
||||
|
||||
pub async fn create_character(&mut self, user_id: &str, name: &str, race: i32, face: i32, hair: i32, stone: i32) -> Result<CreateCharacterResponse, Box<dyn std::error::Error>> {
|
||||
pub async fn create_character(
|
||||
&mut self,
|
||||
user_id: &str,
|
||||
name: &str,
|
||||
race: i32,
|
||||
face: i32,
|
||||
hair: i32,
|
||||
stone: i32,
|
||||
) -> Result<CreateCharacterResponse, Box<dyn std::error::Error>> {
|
||||
let mut hatid = 221;
|
||||
if 0 == race {
|
||||
hatid = 222;
|
||||
}
|
||||
|
||||
|
||||
let inventory = vec![
|
||||
Item {
|
||||
item_id: 30,
|
||||
@@ -135,7 +154,7 @@ impl CharacterDbClient {
|
||||
slot: 12,
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
let stats = Stats {
|
||||
job: 0,
|
||||
str: 10,
|
||||
@@ -160,8 +179,19 @@ impl CharacterDbClient {
|
||||
pat_cooldown_time: 0,
|
||||
};
|
||||
|
||||
let looks = Looks {race, face, hair, stone};
|
||||
let position = Position {map_id: 20, x: 5200.00, y: 5200.00, z: 1.0, spawn_id: 1};
|
||||
let looks = Looks {
|
||||
race,
|
||||
face,
|
||||
hair,
|
||||
stone,
|
||||
};
|
||||
let position = Position {
|
||||
map_id: 20,
|
||||
x: 5200.00,
|
||||
y: 5200.00,
|
||||
z: 1.0,
|
||||
spawn_id: 1,
|
||||
};
|
||||
|
||||
let request = tonic::Request::new(CreateCharacterRequest {
|
||||
user_id: user_id.parse().unwrap(),
|
||||
@@ -175,7 +205,12 @@ impl CharacterDbClient {
|
||||
Ok(response.into_inner())
|
||||
}
|
||||
|
||||
pub async fn delete_character(&mut self, user_id: &str, char_id: &str, delete_type: i32) -> Result<DeleteCharacterResponse, Box<dyn std::error::Error>> {
|
||||
pub async fn delete_character(
|
||||
&mut self,
|
||||
user_id: &str,
|
||||
char_id: &str,
|
||||
delete_type: i32,
|
||||
) -> Result<DeleteCharacterResponse, Box<dyn std::error::Error>> {
|
||||
let request = tonic::Request::new(DeleteCharacterRequest {
|
||||
user_id: user_id.parse().unwrap(),
|
||||
character_id: char_id.parse().unwrap(),
|
||||
@@ -184,4 +219,4 @@ impl CharacterDbClient {
|
||||
let response = self.client.delete_character(request).await?;
|
||||
Ok(response.into_inner())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
use std::sync::Arc;
|
||||
use tracing::debug;
|
||||
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, GetCharacterListRequest, GetCharacterListResponse, GetCharacterRequest, GetCharacterResponse};
|
||||
use crate::character_service::character_common::{Character, CharacterFull, Looks, Stats};
|
||||
use crate::character_service::character::{
|
||||
CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest,
|
||||
DeleteCharacterResponse, GetCharacterListRequest, GetCharacterListResponse,
|
||||
GetCharacterRequest, GetCharacterResponse,
|
||||
};
|
||||
use crate::character_service::character_common::{Character, CharacterFull};
|
||||
use std::sync::Arc;
|
||||
use tonic::{Request, Response, Status};
|
||||
use tracing::debug;
|
||||
|
||||
pub mod character_common {
|
||||
tonic::include_proto!("character_common");
|
||||
@@ -20,60 +23,103 @@ pub struct MyCharacterService {
|
||||
|
||||
#[tonic::async_trait]
|
||||
impl CharacterService for MyCharacterService {
|
||||
async fn get_character_list(&self, request: Request<GetCharacterListRequest>) -> Result<Response<GetCharacterListResponse>, Status> {
|
||||
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);
|
||||
|
||||
let character_list = self.character_db_client.as_ref().clone().get_character_list(&user_id).await
|
||||
let character_list = self
|
||||
.character_db_client
|
||||
.as_ref()
|
||||
.clone()
|
||||
.get_character_list(&user_id)
|
||||
.await
|
||||
.map_err(|_| Status::aborted("Unable to get character list"))?;
|
||||
debug!("{:?}", character_list.characters);
|
||||
|
||||
let mut characters: Vec<Character> = vec![];
|
||||
for character in character_list.characters {
|
||||
characters.push(
|
||||
Character {
|
||||
character_id: character.id.to_string(),
|
||||
name: character.name,
|
||||
last_played: 0,
|
||||
delete_time: character.deleted_at.parse().unwrap_or_default(),
|
||||
stats: serde_json::from_str(&character.stats).unwrap(),
|
||||
looks: serde_json::from_str(&character.looks).unwrap(),
|
||||
items: serde_json::from_str(&character.inventory).unwrap(),
|
||||
}
|
||||
)
|
||||
characters.push(Character {
|
||||
character_id: character.id.to_string(),
|
||||
name: character.name,
|
||||
last_played: 0,
|
||||
delete_time: character.deleted_at.parse().unwrap_or_default(),
|
||||
stats: serde_json::from_str(&character.stats).unwrap(),
|
||||
looks: serde_json::from_str(&character.looks).unwrap(),
|
||||
items: serde_json::from_str(&character.inventory).unwrap(),
|
||||
})
|
||||
}
|
||||
|
||||
let response = GetCharacterListResponse { characters };
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
|
||||
async fn create_character(&self, request: Request<CreateCharacterRequest>) -> Result<Response<CreateCharacterResponse>, Status> {
|
||||
async fn create_character(
|
||||
&self,
|
||||
request: Request<CreateCharacterRequest>,
|
||||
) -> Result<Response<CreateCharacterResponse>, Status> {
|
||||
let req = request.into_inner();
|
||||
debug!("{:?}", req);
|
||||
|
||||
let create_character_response = self.character_db_client.as_ref().clone().create_character(&req.user_id, &req.name, req.race, req.face, req.hair, req.stone)
|
||||
|
||||
let create_character_response = self
|
||||
.character_db_client
|
||||
.as_ref()
|
||||
.clone()
|
||||
.create_character(
|
||||
&req.user_id,
|
||||
&req.name,
|
||||
req.race,
|
||||
req.face,
|
||||
req.hair,
|
||||
req.stone,
|
||||
)
|
||||
.await
|
||||
.map_err(|_| Status::aborted("Unable to create character"))?;
|
||||
|
||||
let response = CreateCharacterResponse { result: create_character_response.result };
|
||||
|
||||
let response = CreateCharacterResponse {
|
||||
result: create_character_response.result,
|
||||
};
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
|
||||
async fn delete_character(&self, request: Request<DeleteCharacterRequest>) -> Result<Response<DeleteCharacterResponse>, Status> {
|
||||
async fn delete_character(
|
||||
&self,
|
||||
request: Request<DeleteCharacterRequest>,
|
||||
) -> Result<Response<DeleteCharacterResponse>, Status> {
|
||||
let req = request.into_inner();
|
||||
debug!("{:?}", req);
|
||||
|
||||
let delete_character_response = self.character_db_client.as_ref().clone().delete_character(&req.user_id, &req.char_id, req.delete_type).await.map_err(|_| Status::not_found("Character not found"))?;
|
||||
let response = DeleteCharacterResponse { remaining_time: delete_character_response.remaining_time, name: delete_character_response.name };
|
||||
let delete_character_response = self
|
||||
.character_db_client
|
||||
.as_ref()
|
||||
.clone()
|
||||
.delete_character(&req.user_id, &req.char_id, req.delete_type)
|
||||
.await
|
||||
.map_err(|_| Status::not_found("Character not found"))?;
|
||||
let response = DeleteCharacterResponse {
|
||||
remaining_time: delete_character_response.remaining_time,
|
||||
name: delete_character_response.name,
|
||||
};
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
|
||||
async fn get_character(&self, request: Request<GetCharacterRequest>) -> Result<Response<GetCharacterResponse>, Status> {
|
||||
async fn get_character(
|
||||
&self,
|
||||
request: Request<GetCharacterRequest>,
|
||||
) -> Result<Response<GetCharacterResponse>, Status> {
|
||||
let req = request.into_inner();
|
||||
debug!("{:?}", req);
|
||||
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 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(),
|
||||
@@ -84,8 +130,10 @@ impl CharacterService for MyCharacterService {
|
||||
skills: serde_json::from_str(&get_character_response.skills).unwrap(),
|
||||
items: serde_json::from_str(&get_character_response.inventory).unwrap(),
|
||||
};
|
||||
|
||||
let response = GetCharacterResponse { character: Some(character) };
|
||||
|
||||
let response = GetCharacterResponse {
|
||||
character: Some(character),
|
||||
};
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,29 @@
|
||||
mod character_service;
|
||||
mod character_db_client;
|
||||
mod character_service;
|
||||
pub mod database {
|
||||
tonic::include_proto!("character_db_api");
|
||||
}
|
||||
|
||||
use crate::character_db_client::CharacterDbClient;
|
||||
use crate::character_service::character::character_service_server::CharacterServiceServer;
|
||||
use crate::character_service::MyCharacterService;
|
||||
use dotenv::dotenv;
|
||||
use std::collections::HashMap;
|
||||
use std::env;
|
||||
use std::str::FromStr;
|
||||
use std::sync::Arc;
|
||||
use tokio::{select, signal};
|
||||
use tracing::{info, Level};
|
||||
use tracing::Level;
|
||||
use utils::consul_registration;
|
||||
use utils::service_discovery::get_service_address;
|
||||
use crate::character_db_client::CharacterDbClient;
|
||||
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>> {
|
||||
dotenv().ok();
|
||||
tracing_subscriber::fmt()
|
||||
.with_max_level(Level::from_str(&env::var("LOG_LEVEL").unwrap_or_else(|_| "info".to_string())).unwrap_or_else(|_| Level::INFO))
|
||||
.with_max_level(
|
||||
Level::from_str(&env::var("LOG_LEVEL").unwrap_or_else(|_| "info".to_string()))
|
||||
.unwrap_or_else(|_| Level::INFO),
|
||||
)
|
||||
.init();
|
||||
|
||||
// Set the gRPC server address
|
||||
@@ -31,7 +33,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
|
||||
let consul_url = env::var("CONSUL_URL").unwrap_or_else(|_| "http://127.0.0.1:8500".to_string());
|
||||
let service_name = env::var("SERVICE_NAME").unwrap_or_else(|_| "character-service".to_string());
|
||||
let service_address = env::var("CHARACTER_SERVICE_ADDR").unwrap_or_else(|_| "127.0.0.1".to_string());
|
||||
let service_address =
|
||||
env::var("CHARACTER_SERVICE_ADDR").unwrap_or_else(|_| "127.0.0.1".to_string());
|
||||
let service_port = port.clone();
|
||||
let health_check_url = format!("http://{}:{}/health", service_address, health_port);
|
||||
let health_check_endpoint_addr = format!("{}:{}", service_address, health_port);
|
||||
@@ -53,7 +56,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
meta,
|
||||
&health_check_url,
|
||||
)
|
||||
.await?;
|
||||
.await?;
|
||||
|
||||
// Start health-check endpoint
|
||||
consul_registration::start_health_check(addr.as_str()).await?;
|
||||
@@ -61,10 +64,13 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
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 db_url = format!(
|
||||
"http://{}:{}",
|
||||
db_address.ServiceAddress, db_address.ServicePort
|
||||
);
|
||||
let character_db_client = Arc::new(CharacterDbClient::connect(&db_url).await?);
|
||||
let character_service = MyCharacterService {
|
||||
character_db_client
|
||||
character_db_client,
|
||||
};
|
||||
|
||||
tonic::transport::Server::builder()
|
||||
@@ -72,9 +78,10 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
.serve(address)
|
||||
.await?;
|
||||
|
||||
|
||||
utils::signal_handler::wait_for_signal().await;
|
||||
|
||||
consul_registration::deregister_service(&consul_url, service_id.as_str()).await.expect("");
|
||||
consul_registration::deregister_service(&consul_url, service_id.as_str())
|
||||
.await
|
||||
.expect("");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user