impl gameevent serialize
parent
44c4089e26
commit
829a10f75b
|
|
@ -3,8 +3,8 @@ use json;
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct GameEvent {
|
pub struct GameEvent {
|
||||||
d: json::JsonValue,
|
pub d: json::JsonValue,
|
||||||
sender: String,
|
pub sender: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Eq, Debug, Clone)]
|
#[derive(PartialEq, Eq, Debug, Clone)]
|
||||||
|
|
@ -122,12 +122,30 @@ impl GameEvent {
|
||||||
}
|
}
|
||||||
out
|
out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn serialize(&self) -> String {
|
||||||
|
(json::object!{
|
||||||
|
GameEventType: format!("{:?}", self.mode()),
|
||||||
|
sources: self.sources(),
|
||||||
|
targets: self.targets(),
|
||||||
|
params: self.params(),
|
||||||
|
}).dump()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
use log::{debug, LevelFilter};
|
||||||
|
|
||||||
|
fn init() {
|
||||||
|
let _ = env_logger::builder()
|
||||||
|
.is_test(true)
|
||||||
|
.filter_level(LevelFilter::Trace)
|
||||||
|
.try_init();
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn new() {
|
fn new() {
|
||||||
let ge = GameEvent::new(Event{sender: "".to_string(), body: "\"a\"".to_string(), since: "".to_string()});
|
let ge = GameEvent::new(Event{sender: "".to_string(), body: "\"a\"".to_string(), since: "".to_string()});
|
||||||
|
|
@ -220,4 +238,39 @@ mod tests {
|
||||||
assert!(ge.targets().len() == 0);
|
assert!(ge.targets().len() == 0);
|
||||||
assert!(ge.sources().len() == 0);
|
assert!(ge.sources().len() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn serialize() {
|
||||||
|
init();
|
||||||
|
let ge = GameEvent{
|
||||||
|
d: json::object!{},
|
||||||
|
sender: "a".to_string(),
|
||||||
|
};
|
||||||
|
assert!(ge.serialize() == r#"{"GameEventType":"Null","sources":[],"targets":[],"params":[]}"#, "{}", ge.serialize());
|
||||||
|
|
||||||
|
let ge = GameEvent{
|
||||||
|
d: json::object!{GameEventType: "GameStart"},
|
||||||
|
sender: "a".to_string(),
|
||||||
|
};
|
||||||
|
assert!(ge.serialize() == r#"{"GameEventType":"GameStart","sources":[],"targets":[],"params":[]}"#, "{}", ge.serialize());
|
||||||
|
|
||||||
|
let ge = GameEvent{
|
||||||
|
d: json::object!{GameEventType: "GameStart", params: ["hi"]},
|
||||||
|
sender: "a".to_string(),
|
||||||
|
};
|
||||||
|
assert!(ge.serialize() == r#"{"GameEventType":"GameStart","sources":[],"targets":[],"params":["hi"]}"#, "{}", ge.serialize());
|
||||||
|
|
||||||
|
let ge = GameEvent{
|
||||||
|
d: json::object!{GameEventType: "GameStart", sources: ["hi"], targets: ["hi2"]},
|
||||||
|
sender: "a".to_string(),
|
||||||
|
};
|
||||||
|
assert!(ge.serialize() == r#"{"GameEventType":"GameStart","sources":["hi"],"targets":["hi2"],"params":[]}"#, "{}", ge.serialize());
|
||||||
|
|
||||||
|
let ge = GameEvent{
|
||||||
|
d: json::object!{GameEventType: "Null", sources: ["hi"], targets: ["hi2"]},
|
||||||
|
sender: "a".to_string(),
|
||||||
|
};
|
||||||
|
assert!(ge.serialize() == r#"{"GameEventType":"Null","sources":["hi"],"targets":["hi2"],"params":[]}"#, "{}", ge.serialize());
|
||||||
|
debug!("sample gameevent serialize: {}", ge.serialize());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ use super::super::policy::Policy;
|
||||||
use super::super::role::Role;
|
use super::super::role::Role;
|
||||||
use super::super::player::Player;
|
use super::super::player::Player;
|
||||||
|
|
||||||
|
use json;
|
||||||
|
|
||||||
impl GameMaster {
|
impl GameMaster {
|
||||||
pub fn game_is_over(&mut self) -> Result<GameEvent, Role> {
|
pub fn game_is_over(&mut self) -> Result<GameEvent, Role> {
|
||||||
if self.policies[&Policy::Facist] >= 3 {
|
if self.policies[&Policy::Facist] >= 3 {
|
||||||
|
|
@ -28,7 +30,11 @@ impl GameMaster {
|
||||||
pub fn game_election(&mut self) -> Result<GameEvent, Role> {
|
pub fn game_election(&mut self) -> Result<GameEvent, Role> {
|
||||||
let mut ge = GameEventType::ElectionPend.build();
|
let mut ge = GameEventType::ElectionPend.build();
|
||||||
let president_candidate = self.candidate_presidents.pop().unwrap();
|
let president_candidate = self.candidate_presidents.pop().unwrap();
|
||||||
ge.d["targets"] = [president_candidate.clone()];
|
ge.d["targets"] = json::array![president_candidate.clone()];
|
||||||
|
ge.d["params"] = json::array!["president"];
|
||||||
|
if self.room.send(ge.serialize()).is_err() {
|
||||||
|
return Err(Role::Null);
|
||||||
|
}
|
||||||
Err(Role::Null)
|
Err(Role::Null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue