Implement message types and lobby join
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
/*
|
||||
use super::super::super::model::state::room::Room;
|
||||
|
||||
pub struct GameMaster {
|
||||
@@ -10,6 +11,24 @@ impl GameMaster {
|
||||
room: room,
|
||||
}
|
||||
}
|
||||
|
||||
fn run(&self) -> Result<String, String> {
|
||||
self.run_lobby()?;
|
||||
self.run_game_setup()?;
|
||||
self.run_game()
|
||||
}
|
||||
|
||||
fn run_lobby(&self) -> Result<String, String> {
|
||||
Err("not impl".to_string())
|
||||
}
|
||||
|
||||
fn run_game_setup(&self) -> Result<String, String> {
|
||||
Err("not impl".to_string())
|
||||
}
|
||||
|
||||
fn run_game(&self) -> Result<String, String> {
|
||||
Err("not impl".to_string())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -36,11 +55,29 @@ mod tests {
|
||||
let _ = GameMaster::new(r);
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn new_mockrooms() {
|
||||
let mut mrs = MockRooms::new();
|
||||
let r = mrs.create();
|
||||
let _ = GameMaster::new(r);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn gm_run_lobby_fail() {
|
||||
let gm = GameMaster::new(Box::new(MockRoom::create()));
|
||||
panic!("not impl");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn gm_run_game_setup_fail() {
|
||||
let gm = GameMaster::new(Box::new(MockRoom::create()));
|
||||
panic!("not impl");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn gm_run_game_fail() {
|
||||
let gm = GameMaster::new(Box::new(MockRoom::create()));
|
||||
panic!("not impl");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
70
secert-hitler/src/controller/gamemaster/lobby.rs
Normal file
70
secert-hitler/src/controller/gamemaster/lobby.rs
Normal file
@@ -0,0 +1,70 @@
|
||||
use super::player::Player;
|
||||
use super::super::super::model::state::event::Event;
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub struct Lobby {
|
||||
players: HashMap<String, Player>,
|
||||
}
|
||||
|
||||
impl Lobby {
|
||||
fn new() -> Lobby {
|
||||
Lobby{
|
||||
players: HashMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
fn eat(&mut self, message: Event) {
|
||||
let j = message.join();
|
||||
if j.is_none() {
|
||||
return;
|
||||
}
|
||||
let id = j.unwrap();
|
||||
self.players.insert(id.clone(), Player::new(id));
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
fn _dummy_event(m: &str) -> Event {
|
||||
Event{
|
||||
body: m.to_string(),
|
||||
next: "a".to_string(),
|
||||
sender: "b".to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn new_lobby() {
|
||||
let _ = Lobby::new();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn eat_join() {
|
||||
let mut l = Lobby::new();
|
||||
let e = _dummy_event(r#"{"membership": "join", "displayname": "a"}"#);
|
||||
let was = l.players.len();
|
||||
l.eat(e);
|
||||
assert!(was+1 == l.players.len(), "want {}, got {}: {:?}", was+1, l.players.len(), l.players);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn eat_join_malformatted() {
|
||||
let mut l = Lobby::new();
|
||||
let e = _dummy_event(r#"{"membership": "join"}"#);
|
||||
let was = l.players.len();
|
||||
l.eat(e);
|
||||
assert!(was == l.players.len());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn eat_null() {
|
||||
let mut l = Lobby::new();
|
||||
let e = _dummy_event(r#"{"hello": "world"}"#);
|
||||
let was = l.players.len();
|
||||
l.eat(e);
|
||||
assert!(was == l.players.len());
|
||||
}
|
||||
}
|
||||
@@ -1 +1,3 @@
|
||||
pub mod gamemaster;
|
||||
pub mod player;
|
||||
pub mod lobby;
|
||||
|
||||
22
secert-hitler/src/controller/gamemaster/player.rs
Normal file
22
secert-hitler/src/controller/gamemaster/player.rs
Normal file
@@ -0,0 +1,22 @@
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Player {
|
||||
id: String,
|
||||
}
|
||||
|
||||
impl Player {
|
||||
pub fn new(id: String) -> Player {
|
||||
Player {
|
||||
id: id,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn new_player() {
|
||||
let _ = Player::new("id".to_string());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user