diff --git a/src/main.rs b/src/main.rs index 501aac1..4e22c9c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,23 +13,34 @@ struct Config { delay: Duration, } +#[tokio::main] +async fn main() { + let url = env::var("URL").unwrap_or_else(|_| "localhost:2048".to_string()); + let delay = env::var("DELAY") + .map(|s| s.parse::().unwrap()) + .unwrap_or(500); + + let delay = Duration::from_millis(delay); + let config = Config { delay }; + let server = TcpListener::bind(url).await.unwrap(); + + loop { + let (stream, address) = server.accept().await.unwrap(); + println!("[server] connection from '{address}'"); + let (_, write) = stream.into_split(); + tokio::spawn(game(write, config.clone())); + } +} + async fn game(mut write: OwnedWriteHalf, config: Config) -> Option<()> { 'session: loop { let rules = GameRules::default(); let mut game = Game::new(rules); let mut controller = SimulatedController::new(50, 20); - let displayer = GridDisplayer::new(1234); + '_game: loop { - if turn( - &mut game, - config.delay, - &displayer, - &mut write, - &mut controller, - ) - .await - .is_none() - { + let result = turn(&mut game, &mut controller, &mut write, config.delay).await; + if result.is_none() { continue 'session; } } @@ -38,11 +49,11 @@ async fn game(mut write: OwnedWriteHalf, config: Config) -> Option<()> { async fn turn( game: &mut Game, - delay: Duration, - displayer: &GridDisplayer, - write: &mut OwnedWriteHalf, controller: &mut SimulatedController, + write: &mut OwnedWriteHalf, + delay: Duration, ) -> Option<()> { + let displayer = GridDisplayer::new(1234); let display = displayer.display(game.get_board()); let clear = clear::All; let goto = cursor::Goto(1, 1); @@ -54,20 +65,3 @@ async fn turn( sleep(delay).await; Some(()) } - -#[tokio::main] -async fn main() { - let url = env::var("URL").unwrap_or_else(|_| "localhost:2048".to_string()); - let delay = env::var("DELAY") - .map(|s| s.parse::().unwrap()) - .unwrap_or(500); - let delay = Duration::from_millis(delay); - let config = Config { delay }; - let server = TcpListener::bind(url).await.unwrap(); - loop { - let (stream, address) = server.accept().await.unwrap(); - println!("[server] connection from '{address}'"); - let (_, write) = stream.into_split(); - tokio::spawn(game(write, config.clone())); - } -}