impl run lobby without checks

This commit is contained in:
bel
2020-05-03 11:19:42 -06:00
parent cb1a9050e8
commit f1311c9086
6 changed files with 201 additions and 23 deletions

View File

@@ -1,5 +1,9 @@
use super::super::super::model::state::room::Room;
use super::lobby::Lobby;
use super::gameevent::GameEvent;
use super::gameevent::GameEventType;
use std::thread;
use std::time;
pub struct GameMaster {
room: Box<dyn Room>,
@@ -21,18 +25,24 @@ impl GameMaster {
}
fn run_lobby(&mut self) -> Result<String, String> {
println!(". run lobby");
loop {
while !self.lobby.locked {
let rollback = self.room.since();
let events = self.room.sync();
println!(". rollback: {:?}", rollback);
println!("top of loop: since={:?}, events={:?}", self.room.since(), events);
for e in &events {
println!("e: {:?}", e);
let ge = GameEvent::new(e.body.clone());
println!(" ge.mode = {:?}", ge.mode());
if ge.mode() == GameEventType::GameStart {
println!(" should return");
self.room.rollback(e.since.clone());
self.lobby.lock();
return Ok("ok".to_string());
}
self.lobby.eat(e.clone());
}
self.room.rollback(rollback);
break
thread::sleep(time::Duration::new(1, 0));
}
Err("not impl".to_string())
Ok("ok".to_string()) // todo: on lobby too small, return err and do not lock
}
fn run_game_setup(&mut self) -> Result<String, String> {
@@ -54,7 +64,6 @@ mod tests {
#[test]
fn new_mockroom() {
let _ = GameMaster::new(Box::new(MockRoom::create()));
println!("made");
}
#[test]
@@ -78,27 +87,33 @@ mod tests {
#[test]
fn run_lobby() {
let mut mrs = MockRooms::new();
let mut r1 = mrs.create();
let r1 = mrs.create();
let room_id = r1.room_id();
let mut gm = GameMaster::new(r1);
let mut r2 = mrs.join(room_id).unwrap();
r2.send(r#"{
r2.send(format!(r#"{{
"msgtype": "m.text",
"body": ""
}"#);
gm.run_lobby();
assert!(gm.lobby.players.len() == 1, "players: {:?}, sync: {:?}", gm.lobby.players, gm.room.sync());
"body": "{{\"GameEventType\": \"GameStart\"}}"
}}"#)).unwrap(); // TODO mark end of new players
gm.run_lobby(); // todo assert is_ok
assert!(gm.lobby.players.len() == 2, "first run_lobby players: {:?}, sync: {:?}", gm.lobby.players, gm.room.sync());
let mut players1 = vec![];
for k in gm.lobby.players.keys() {
players1.push(k.clone());
}
gm.run_lobby(); // todo assert is_ok
assert!(gm.lobby.players.len() == 2, "secnd run_lobby players: {:?}, sync: {:?}", gm.lobby.players, gm.room.sync());
let players2 = gm.lobby.players.keys();
assert!(format!("{:?}", players1) == format!("{:?}", players2));
}
#[test]
fn run_game_setup_fail() {
let gm = GameMaster::new(Box::new(MockRoom::create()));
panic!("not impl");
assert!(false, "not impl");
}
#[test]
fn run_game_fail() {
let gm = GameMaster::new(Box::new(MockRoom::create()));
panic!("not impl");
assert!(false, "not impl");
}
}