Added initial game logic service
This commit is contained in:
85
game-logic-service/src/main.rs
Normal file
85
game-logic-service/src/main.rs
Normal file
@@ -0,0 +1,85 @@
|
||||
pub mod components;
|
||||
mod entity_factory;
|
||||
mod id_manager;
|
||||
mod loader;
|
||||
mod random;
|
||||
mod game_logic_service;
|
||||
mod game_service;
|
||||
|
||||
use dotenv::dotenv;
|
||||
use std::env;
|
||||
use hecs::World;
|
||||
use tracing::{debug, error, info};
|
||||
use utils::service_discovery::{get_kube_service_endpoints_by_dns, get_service_endpoints_by_dns};
|
||||
use utils::{health_check, logging};
|
||||
|
||||
use loader::load_zone_for_map;
|
||||
use crate::components::position::Position;
|
||||
use crate::entity_factory::EntityFactory;
|
||||
|
||||
#[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, &["game_logic_service", "health_check"]);
|
||||
|
||||
|
||||
let map_id = env::var("MAP_ID").unwrap_or_else(|_| "20".to_string()).parse::<u32>()?;
|
||||
let file_path = "/opt/data/zone_data.json";
|
||||
|
||||
// // 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(|_| "50056".to_string());
|
||||
let db_url = format!(
|
||||
"http://{}",
|
||||
get_kube_service_endpoints_by_dns("database-service", "tcp", "database-service")
|
||||
.await?
|
||||
.get(0)
|
||||
.unwrap()
|
||||
);
|
||||
let chat_service = format!(
|
||||
"http://{}",
|
||||
get_kube_service_endpoints_by_dns("chat-service", "tcp", "chat-service")
|
||||
.await?
|
||||
.get(0)
|
||||
.unwrap()
|
||||
);
|
||||
|
||||
let game_logic_task = tokio::spawn(async move {
|
||||
let mut loading = true;
|
||||
let mut world = World::new();
|
||||
let mut factory = EntityFactory::new(&mut world);
|
||||
|
||||
loop {
|
||||
// Load the map
|
||||
if loading {
|
||||
match load_zone_for_map(file_path, map_id) {
|
||||
Ok(Some(zone)) => {
|
||||
info!("Zone with Map Id {} found:", map_id);
|
||||
factory.load_map(zone);
|
||||
loading = false;
|
||||
}
|
||||
Ok(None) => {
|
||||
error!("No zone found for Map Id {}", map_id);
|
||||
std::thread::sleep(std::time::Duration::from_secs(1));
|
||||
}
|
||||
Err(e) => {
|
||||
error!("Error loading zone: {}", e);
|
||||
std::thread::sleep(std::time::Duration::from_secs(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update the world
|
||||
if !loading {
|
||||
factory.run();
|
||||
}
|
||||
std::thread::sleep(std::time::Duration::from_millis(1000/30));
|
||||
}
|
||||
});
|
||||
|
||||
// Register service with Consul
|
||||
// health_check::start_health_check(addr.as_str()).await?;
|
||||
utils::signal_handler::wait_for_signal().await;
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user