tcp-connect4/src/main.rs
2024-10-19 15:22:25 +02:00

71 lines
No EOL
2.1 KiB
Rust

use tokio::net::TcpListener;
use tracing::{event, level_filters::LevelFilter, span, Instrument, Level};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, Layer};
mod connect4;
mod game_server;
#[tokio::main]
async fn main() {
println!("Hi!");
let _guard = init_logging();
let addr = format!("0.0.0.0:{}", 1234);
let listener = TcpListener::bind(&addr)
.await
.expect(format!("Could not bind the TCP listener to {}", &addr).as_str());
loop {
match listener.accept().await {
Ok((mut socket, _)) => {
tokio::spawn(async move {
let socket_span = span!(
Level::TRACE,
"socket",
address = %socket.peer_addr().unwrap()
);
let _enter = socket_span.enter();
event!(Level::INFO, "new socket connected");
match game_server::handle(&mut socket).instrument(socket_span.clone()).await {
Ok(_) => {
event!(Level::INFO, "Game finished");
}
Err(e) => {
event!(Level::ERROR, "Game failed with error: {e}");
}
};
});
}
Err(e) => {
println!("Error: {}", e);
}
}
}
}
fn init_logging() -> tracing_appender::non_blocking::WorkerGuard {
let file_appender = tracing_appender::rolling::daily("./logs", "connect4.log");
let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender);
let file_subscriber = tracing_subscriber::fmt::layer()
.with_ansi(false)
.with_writer(non_blocking)
.with_target(false)
.with_filter(LevelFilter::TRACE);
let stdout_subscriber = tracing_subscriber::fmt::layer()
.with_ansi(true)
.with_target(false)
.with_filter(LevelFilter::DEBUG);
tracing_subscriber::registry()
.with(file_subscriber)
.with(stdout_subscriber)
.init();
_guard
}