#[cfg(feature = "multiplayer")]
use sevenx_engine::{NetworkServer, NetworkMessage, PlayerInfo};
#[cfg(feature = "multiplayer")]
use std::collections::HashMap;
#[cfg(feature = "multiplayer")]
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🌐 SevenX Engine - Servidor Dedicado");
println!("=====================================");
println!();
let addr = "0.0.0.0:8080".parse()?;
let mut server = NetworkServer::new(addr).await?;
println!("✅ Servidor iniciado em: {}", addr);
println!("⏳ Aguardando conexões...");
println!();
let mut players: HashMap<String, PlayerInfo> = HashMap::new();
let mut tick: u64 = 0;
loop {
if let Err(e) = server.accept().await {
eprintln!("❌ Erro ao aceitar conexão: {}", e);
}
tick += 1;
if tick % 3 == 0 {
let state_data = bincode::serialize(&players).unwrap_or_default();
let msg = NetworkMessage::GameState {
tick,
data: state_data,
};
server.broadcast(msg).await;
}
if tick % 60 == 0 {
let ping_msg = NetworkMessage::Ping {
timestamp: std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_millis() as u64,
};
server.broadcast(ping_msg).await;
println!("📊 Status: {} jogadores conectados | Tick: {}", players.len(), tick);
}
tokio::time::sleep(tokio::time::Duration::from_millis(33)).await;
}
}
#[cfg(not(feature = "multiplayer"))]
fn main() {
eprintln!("❌ Este exemplo requer a feature 'multiplayer'");
eprintln!(" Compile com: cargo run --example dedicated_server --features multiplayer");
std::process::exit(1);
}