make recording game data optional
Some checks failed
Build / build (push) Failing after 1m41s

This commit is contained in:
2025-08-01 19:03:54 +02:00
parent bb6d716773
commit f52b9e531e

View File

@@ -34,7 +34,22 @@ static THREADS: AtomicUsize = AtomicUsize::new(1);
async fn main() {
env_logger::init();
let (sender, mut receiver) = unbounded_channel();
let record = env::var("RECORD")
.ok()
.and_then(|record| {
record
.parse()
.inspect_err(|err| error!("Unable to parse record options: {err}"))
.ok()
})
.unwrap_or(false);
let (sender, receiver) = if record {
let (sender, receiver) = unbounded_channel();
(Some(sender), Some(receiver))
} else {
(None, None)
};
debug!("Creating routes");
let app = Router::new()
@@ -59,6 +74,7 @@ async fn main() {
let port = env::var("PORT").unwrap_or_else(|_| "8000".into());
let listener = TcpListener::bind(format!("0.0.0.0:{port}")).await.unwrap();
if let Some(mut receiver) = receiver {
debug!("Starting observer");
tokio::spawn(async move {
let mut games = HashMap::new();
@@ -104,6 +120,7 @@ async fn main() {
}
warn!("Observer stopped");
});
}
debug!("Starting server");
axum::serve(listener, app).await.unwrap();
@@ -139,10 +156,12 @@ enum RequestType {
}
async fn start(
State(sender): State<UnboundedSender<(RequestType, Request)>>,
State(sender): State<Option<UnboundedSender<(RequestType, Request)>>>,
Json(request): Json<Request>,
) {
if let Err(e) = sender.send((RequestType::Start, request.clone())) {
if let Some(sender) = sender
&& let Err(e) = sender.send((RequestType::Start, request.clone()))
{
warn!("Unable to observe request: {e}");
}
let board = Board::from(&request);
@@ -151,11 +170,13 @@ async fn start(
#[allow(clippy::too_many_lines)]
async fn get_move(
State(sender): State<UnboundedSender<(RequestType, Request)>>,
State(sender): State<Option<UnboundedSender<(RequestType, Request)>>>,
Json(request): Json<Request>,
) -> response::Json<Response> {
let start = Instant::now();
if let Err(e) = sender.send((RequestType::GetMove, request.clone())) {
if let Some(sender) = sender
&& let Err(e) = sender.send((RequestType::GetMove, request.clone()))
{
warn!("Unable to observe request: {e}");
}
let board = Game::from(&request);
@@ -285,10 +306,12 @@ fn score_standard(board: &Board, id: u8) -> u32 {
}
async fn end(
State(sender): State<UnboundedSender<(RequestType, Request)>>,
State(sender): State<Option<UnboundedSender<(RequestType, Request)>>>,
Json(request): Json<Request>,
) {
if let Err(e) = sender.send((RequestType::End, request.clone())) {
if let Some(sender) = sender
&& let Err(e) = sender.send((RequestType::End, request.clone()))
{
warn!("Unable to observe request: {e}");
}
let board = Board::from(&request);