diff --git a/secert-hitler/src/controller/gamemaster/gamemaster.rs b/secert-hitler/src/controller/gamemaster/gamemaster.rs index e5b052a..dcc92cb 100644 --- a/secert-hitler/src/controller/gamemaster/gamemaster.rs +++ b/secert-hitler/src/controller/gamemaster/gamemaster.rs @@ -33,25 +33,27 @@ impl GameMaster { self.run_game() } - fn run_lobby(&mut self) -> Result { - self.run_lobby_loop()?; - self.lobby.ready() - } - - fn run_lobby_loop(&mut self) -> Result { - while !self.lobby.locked { - self.run_lobby_scrape()?; + fn run_lobby(&mut self) -> Result { + let mut r = self.run_lobby_scrape(); + while r.unwrap_or(0) == 0 { + //while r.is_ok() && r.unwrap() == 0 { thread::sleep(time::Duration::new(1, 0)); + r = self.run_lobby_scrape(); } - Ok(0) + return Ok(r.unwrap().clone()); + /* + if r.is_ok() { + return Ok(r.unwrap()); + } + let e = r.err(); + Err(e.unwrap()) + */ } - fn run_lobby_scrape(&mut self) -> Result { - /* - let rollback = self.room.since(); + fn run_lobby_scrape(&mut self) -> Result { let events = self.room.sync(); for e in &events { - let ge = GameEvent::new(e.body.clone()); + let ge = GameEvent::new(e.clone()); if ge.mode() == GameEventType::GameStart { self.room.rollback(e.since.clone()); self.lobby.lock(); @@ -59,7 +61,6 @@ impl GameMaster { } self.lobby.eat(e.clone()); } - */ Ok(0) } @@ -131,11 +132,15 @@ mod tests { #[test] fn run_lobby() { init(); + println!("run_lobby 1"); let mut mrs = MockRooms::new(); let r1 = mrs.create(); + println!("run_lobby 2"); let room_id = r1.room_id(); let mut gm = GameMaster::new(r1); + println!("run_lobby 3"); for i in 0..4 { + println!("run_lobby attempt stop #{}", i); let mut r2 = mrs.join(room_id.clone()).unwrap(); r2.send(format!(r#"{{ "msgtype": "m.text", @@ -160,7 +165,6 @@ mod tests { init(); let mut mrs = MockRooms::new(); let r1 = mrs.create(); - let room_id = r1.room_id(); let mut gm = GameMaster::new(r1); assert!(gm.run_game_setup().is_ok()); } diff --git a/secert-hitler/src/controller/gamemaster/lobby.rs b/secert-hitler/src/controller/gamemaster/lobby.rs index 1f9310a..296b5a4 100644 --- a/secert-hitler/src/controller/gamemaster/lobby.rs +++ b/secert-hitler/src/controller/gamemaster/lobby.rs @@ -4,6 +4,7 @@ use super::super::super::config; use std::collections::HashMap; +#[derive(Clone, Debug)] pub struct Lobby { pub players: HashMap, pub locked: bool, @@ -36,10 +37,10 @@ impl Lobby { self.locked = true; } - pub fn ready(&self) -> Result { + pub fn ready(&self) -> Result { let n: usize = self.players.len(); if n < config::MIN_PLAYERS { - return Err("not enough players"); + return Err("not enough players".to_string()); } Ok(n) } diff --git a/secert-hitler/src/controller/gamemaster/mod.rs b/secert-hitler/src/controller/gamemaster/mod.rs index b8a1bfc..bfefc32 100644 --- a/secert-hitler/src/controller/gamemaster/mod.rs +++ b/secert-hitler/src/controller/gamemaster/mod.rs @@ -1,4 +1,4 @@ -//pub mod gamemaster; +pub mod gamemaster; pub mod player; pub mod role; pub mod lobby; diff --git a/secert-hitler/src/model/state/mockroom.rs b/secert-hitler/src/model/state/mockroom.rs index e00957c..43adeeb 100644 --- a/secert-hitler/src/model/state/mockroom.rs +++ b/secert-hitler/src/model/state/mockroom.rs @@ -163,7 +163,7 @@ mod tests { sinces.push(r.send("0".to_string()).ok().unwrap()); sinces.push(r.send("0".to_string()).ok().unwrap()); r.sync(); - assert!(r.since == sinces[sinces.len()-1]); + assert!(r.since == *sinces.last().unwrap()); } } @@ -175,7 +175,7 @@ mod tests { for _ in 0..10 { sinces.push(r.send("0".to_string()).ok().unwrap()); r.sync(); - assert!(r.since == sinces[sinces.len()-1]); + assert!(r.since == *sinces.last().unwrap()); } } @@ -186,9 +186,9 @@ mod tests { let mut sinces = vec![]; sinces.push(r.send("0".to_string()).ok().unwrap()); assert!(r.sync().len() == 1); - assert!(r.since == sinces[sinces.len()-1], "after one send: want {:?}, got {:?}: {:?}", sinces[sinces.len()-1], r.since, sinces); + assert!(r.since == *sinces.last().unwrap(), "after one send: want {:?}, got {:?}: {:?}", *sinces.last().unwrap(), r.since, sinces); assert!(r.sync().len() == 0); - assert!(r.since == sinces[sinces.len()-1], "after no send: want {:?}, got {:?}: {:?}", sinces[sinces.len()-1], r.since, sinces); + assert!(r.since == *sinces.last().unwrap(), "after no send: want {:?}, got {:?}: {:?}", *sinces.last().unwrap(), r.since, sinces); } #[test]