diff --git a/battlesnake/src/main.rs b/battlesnake/src/main.rs index cd38218..1f3336d 100644 --- a/battlesnake/src/main.rs +++ b/battlesnake/src/main.rs @@ -1,11 +1,15 @@ #![allow(clippy::needless_pass_by_value)] use enum_iterator::Sequence; -use log::info; -use rocket::fairing::AdHoc; -use rocket::http::Status; -use rocket::serde::{json::Json, Deserialize}; -use rocket::{get, launch, post, routes}; +use log::{error, info}; +use rocket::{ + fairing::AdHoc, + get, + http::Status, + launch, post, routes, + serde::{json::Json, Deserialize}, + tokio::task, +}; use serde::Serialize; use serde_json::Value; use std::env; @@ -208,13 +212,19 @@ fn handle_start(start_req: Json) -> Status { } #[post("/move", format = "json", data = "")] -fn handle_move(move_req: Json) -> Option> { - let response = logic::get_move( - &move_req.game, - move_req.turn, - &move_req.board, - &move_req.you, - )?; +async fn handle_move(move_req: Json) -> Option> { + let response = task::spawn_blocking(move || { + logic::get_move( + &move_req.game, + move_req.turn, + &move_req.board, + &move_req.you, + ) + }) + .await + .inspect_err(|e| error!("failed to join compute thread: {e}")) + .ok() + .flatten()?; Some(Json(response)) }