impl gameevent serialize
parent
44c4089e26
commit
829a10f75b
|
|
@ -3,8 +3,8 @@ use json;
|
|||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct GameEvent {
|
||||
d: json::JsonValue,
|
||||
sender: String,
|
||||
pub d: json::JsonValue,
|
||||
pub sender: String,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Debug, Clone)]
|
||||
|
|
@ -122,12 +122,30 @@ impl GameEvent {
|
|||
}
|
||||
out
|
||||
}
|
||||
|
||||
pub fn serialize(&self) -> String {
|
||||
(json::object!{
|
||||
GameEventType: format!("{:?}", self.mode()),
|
||||
sources: self.sources(),
|
||||
targets: self.targets(),
|
||||
params: self.params(),
|
||||
}).dump()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
use log::{debug, LevelFilter};
|
||||
|
||||
fn init() {
|
||||
let _ = env_logger::builder()
|
||||
.is_test(true)
|
||||
.filter_level(LevelFilter::Trace)
|
||||
.try_init();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn new() {
|
||||
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.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::player::Player;
|
||||
|
||||
use json;
|
||||
|
||||
impl GameMaster {
|
||||
pub fn game_is_over(&mut self) -> Result<GameEvent, Role> {
|
||||
if self.policies[&Policy::Facist] >= 3 {
|
||||
|
|
@ -28,7 +30,11 @@ impl GameMaster {
|
|||
pub fn game_election(&mut self) -> Result<GameEvent, Role> {
|
||||
let mut ge = GameEventType::ElectionPend.build();
|
||||
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)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue