refactor
This commit is contained in:
parent
096e44d588
commit
0f92ed9b7e
1 changed files with 25 additions and 31 deletions
56
src/main.rs
56
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::<u64>().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::<u64>().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()));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue