Documentation: - Add detailed README files for all services (auth, character, database, launcher, packet, utils, world) - Create API documentation for the database service with detailed endpoint specifications - Document database schema and relationships - Add service architecture overviews and configuration instructions Unit Tests: - Implement comprehensive test suite for database repositories (user, character, session) - Add gRPC service tests for database interactions - Create tests for packet service components (bufferpool, connection, packets) - Add utility service tests (health check, logging, load balancer, redis cache, service discovery) - Implement auth service user tests - Add character service tests Code Structure: - Reorganize test files into a more consistent structure - Create a dedicated tests crate for integration testing - Add test helpers and mock implementations for easier testing
54 lines
1.8 KiB
Rust
54 lines
1.8 KiB
Rust
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::env;
|
|
use std::str::FromStr;
|
|
use std::sync::Arc;
|
|
use tracing::Level;
|
|
use tracing_subscriber::EnvFilter;
|
|
use utils::logging;
|
|
use utils::service_discovery::get_kube_service_endpoints_by_dns;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
dotenv().ok();
|
|
let app_name = env!("CARGO_PKG_NAME");
|
|
logging::setup_logging(app_name, &["character_service"]);
|
|
|
|
// Set the gRPC server address
|
|
let addr = env::var("LISTEN_ADDR").unwrap_or_else(|_| "0.0.0.0".to_string());
|
|
let port = env::var("SERVICE_PORT").unwrap_or_else(|_| "50053".to_string());
|
|
let db_url = format!(
|
|
"http://{}",
|
|
get_kube_service_endpoints_by_dns("database-service", "tcp", "database-service")
|
|
.await?
|
|
.get(0)
|
|
.unwrap()
|
|
);
|
|
|
|
let full_addr = format!("{}:{}", &addr, port);
|
|
let address = full_addr.parse().expect("Invalid address");
|
|
let character_db_client = Arc::new(CharacterDbClient::connect(&db_url).await?);
|
|
let character_service = MyCharacterService { character_db_client };
|
|
let (mut health_reporter, health_service) = tonic_health::server::health_reporter();
|
|
health_reporter
|
|
.set_serving::<CharacterServiceServer<MyCharacterService>>()
|
|
.await;
|
|
|
|
tonic::transport::Server::builder()
|
|
.add_service(health_service)
|
|
.add_service(CharacterServiceServer::new(character_service))
|
|
.serve(address)
|
|
.await?;
|
|
|
|
utils::signal_handler::wait_for_signal().await;
|
|
Ok(())
|
|
}
|