From 1ae2336180a56cd3d432b6f67ce3acd8a7544259 Mon Sep 17 00:00:00 2001 From: JOLIMAITRE Matthieu Date: Sun, 6 Nov 2022 00:17:37 +0100 Subject: [PATCH] fixed loose game spinning --- src/main.rs | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4e22c9c..7c6b7cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,12 @@ struct Config { delay: Duration, } +#[derive(Debug, Clone)] +enum Error { + Disconnect, + GameEnd, +} + #[tokio::main] async fn main() { let url = env::var("URL").unwrap_or_else(|_| "localhost:2048".to_string()); @@ -32,7 +38,7 @@ async fn main() { } } -async fn game(mut write: OwnedWriteHalf, config: Config) -> Option<()> { +async fn game(mut write: OwnedWriteHalf, config: Config) { 'session: loop { let rules = GameRules::default(); let mut game = Game::new(rules); @@ -40,8 +46,10 @@ async fn game(mut write: OwnedWriteHalf, config: Config) -> Option<()> { '_game: loop { let result = turn(&mut game, &mut controller, &mut write, config.delay).await; - if result.is_none() { - continue 'session; + match result { + Ok(()) => (), + Err(Error::GameEnd) => continue 'session, + Err(Error::Disconnect) => return, } } } @@ -52,16 +60,19 @@ async fn turn( controller: &mut SimulatedController, write: &mut OwnedWriteHalf, delay: Duration, -) -> Option<()> { +) -> Result<(), Error> { let displayer = GridDisplayer::new(1234); let display = displayer.display(game.get_board()); let clear = clear::All; let goto = cursor::Goto(1, 1); let frame = format!("{clear}{goto}{display}"); - write.write_all(frame.as_bytes()).await.ok()?; + write + .write_all(frame.as_bytes()) + .await + .map_err(|_| Error::Disconnect)?; - let movement = controller.next_move(&*game).ok()?; - game.turn(movement).ok()?; + let movement = controller.next_move(&*game).map_err(|_| Error::GameEnd)?; + game.turn(movement).map_err(|_| Error::GameEnd)?; sleep(delay).await; - Some(()) + Ok(()) }