This commit is contained in:
@@ -34,7 +34,22 @@ static THREADS: AtomicUsize = AtomicUsize::new(1);
|
|||||||
async fn main() {
|
async fn main() {
|
||||||
env_logger::init();
|
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");
|
debug!("Creating routes");
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
@@ -59,6 +74,7 @@ async fn main() {
|
|||||||
let port = env::var("PORT").unwrap_or_else(|_| "8000".into());
|
let port = env::var("PORT").unwrap_or_else(|_| "8000".into());
|
||||||
let listener = TcpListener::bind(format!("0.0.0.0:{port}")).await.unwrap();
|
let listener = TcpListener::bind(format!("0.0.0.0:{port}")).await.unwrap();
|
||||||
|
|
||||||
|
if let Some(mut receiver) = receiver {
|
||||||
debug!("Starting observer");
|
debug!("Starting observer");
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
let mut games = HashMap::new();
|
let mut games = HashMap::new();
|
||||||
@@ -104,6 +120,7 @@ async fn main() {
|
|||||||
}
|
}
|
||||||
warn!("Observer stopped");
|
warn!("Observer stopped");
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
debug!("Starting server");
|
debug!("Starting server");
|
||||||
axum::serve(listener, app).await.unwrap();
|
axum::serve(listener, app).await.unwrap();
|
||||||
@@ -139,10 +156,12 @@ enum RequestType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn start(
|
async fn start(
|
||||||
State(sender): State<UnboundedSender<(RequestType, Request)>>,
|
State(sender): State<Option<UnboundedSender<(RequestType, Request)>>>,
|
||||||
Json(request): Json<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}");
|
warn!("Unable to observe request: {e}");
|
||||||
}
|
}
|
||||||
let board = Board::from(&request);
|
let board = Board::from(&request);
|
||||||
@@ -151,11 +170,13 @@ async fn start(
|
|||||||
|
|
||||||
#[allow(clippy::too_many_lines)]
|
#[allow(clippy::too_many_lines)]
|
||||||
async fn get_move(
|
async fn get_move(
|
||||||
State(sender): State<UnboundedSender<(RequestType, Request)>>,
|
State(sender): State<Option<UnboundedSender<(RequestType, Request)>>>,
|
||||||
Json(request): Json<Request>,
|
Json(request): Json<Request>,
|
||||||
) -> response::Json<Response> {
|
) -> response::Json<Response> {
|
||||||
let start = Instant::now();
|
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}");
|
warn!("Unable to observe request: {e}");
|
||||||
}
|
}
|
||||||
let board = Game::from(&request);
|
let board = Game::from(&request);
|
||||||
@@ -285,10 +306,12 @@ fn score_standard(board: &Board, id: u8) -> u32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn end(
|
async fn end(
|
||||||
State(sender): State<UnboundedSender<(RequestType, Request)>>,
|
State(sender): State<Option<UnboundedSender<(RequestType, Request)>>>,
|
||||||
Json(request): Json<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}");
|
warn!("Unable to observe request: {e}");
|
||||||
}
|
}
|
||||||
let board = Board::from(&request);
|
let board = Board::from(&request);
|
||||||
|
Reference in New Issue
Block a user