Nachrichten zwischen Host und Gästen
Gäste grüßen mit Protokollversion, Regel-Kennung, Schlüssel und Name und schicken danach nur Aktionen ohne Spielernummer. Der Host schickt seine Welt, Ablehnungen mit Grund und jeden Takt mit seinen Befehlen, jede Sekunde mit einer Prüfsumme. Ein Gruß einer anderen Version bleibt erkennbar, und das Format ist in den festgeschriebenen Werten verankert. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -8,8 +8,11 @@
|
||||
//! value here deliberately.
|
||||
|
||||
use grovewright_core::codec::Writer;
|
||||
use grovewright_core::command::Command;
|
||||
use grovewright_core::hash::fnv1a64;
|
||||
use grovewright_core::map::{Map, Pos, Terrain, Tile};
|
||||
use grovewright_core::player::PlayerId;
|
||||
use grovewright_core::protocol::{Action, Refusal, ToGuest, ToHost};
|
||||
use grovewright_core::replay::Recording;
|
||||
use grovewright_core::rules::{
|
||||
end_hash, frozen_offline_script, frozen_script, rules_id, RULES_SEED,
|
||||
@@ -114,3 +117,51 @@ fn the_map_encoding_is_unchanged() {
|
||||
core/src/snapshot.rs; then update these bytes"
|
||||
);
|
||||
}
|
||||
|
||||
/// Covers every message between host and guests, built from literal values.
|
||||
#[test]
|
||||
fn the_protocol_format_is_unchanged() {
|
||||
let to_host = [
|
||||
ToHost::Hello {
|
||||
rules: 0x0102_0304_0506_0708,
|
||||
key: [3; 16],
|
||||
name: "Ada".to_owned(),
|
||||
},
|
||||
ToHost::Act(Action::Dig {
|
||||
pos: Pos::new(-2, 9),
|
||||
}),
|
||||
ToHost::Diverged { tick: 40, hash: 77 },
|
||||
];
|
||||
let to_guest = [
|
||||
ToGuest::World {
|
||||
snapshot: vec![5, 6, 7],
|
||||
},
|
||||
ToGuest::Refused(Refusal::WorldFull),
|
||||
ToGuest::Tick {
|
||||
tick: 12,
|
||||
commands: vec![Command::Dig {
|
||||
player: PlayerId(1),
|
||||
pos: Pos::new(3, 4),
|
||||
}],
|
||||
check: Some(99),
|
||||
},
|
||||
ToGuest::Tick {
|
||||
tick: 13,
|
||||
commands: vec![],
|
||||
check: None,
|
||||
},
|
||||
];
|
||||
let mut bytes = Vec::new();
|
||||
for message in &to_host {
|
||||
bytes.extend(message.encode());
|
||||
}
|
||||
for message in &to_guest {
|
||||
bytes.extend(message.encode());
|
||||
}
|
||||
assert_eq!(
|
||||
fnv1a64(&bytes),
|
||||
0xc263_69c0_f892_247b,
|
||||
"the messages between host and guests changed; raise \
|
||||
PROTOCOL_VERSION in core/src/protocol.rs; then update this value"
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user