71 lines
No EOL
2.1 KiB
Rust
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
|
|
} |