From 5726d34f31d0129d314dc447340b0feb56534060 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 13 Mar 2026 03:20:46 +0100 Subject: add server-side voting logic --- server/protocol/src/lib.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'server/protocol/src') diff --git a/server/protocol/src/lib.rs b/server/protocol/src/lib.rs index 9dfcc4dd..903f707a 100644 --- a/server/protocol/src/lib.rs +++ b/server/protocol/src/lib.rs @@ -114,6 +114,7 @@ pub struct GamedataFlags { fn chef_class() -> PlayerClass { PlayerClass::Chef } + #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "type")] pub enum PacketS { @@ -153,6 +154,15 @@ pub enum PacketS { Keepalive, Ready, + InitiateVote { + player: PlayerID, + subject: VoteSubject, + }, + CastVote { + player: PlayerID, + agree: bool, + }, + /// For use in replay sessions only ReplayTick { dt: f64, @@ -210,13 +220,19 @@ pub enum Message { Tile(TileIndex), } +pub fn version() -> PacketC { + PacketC::Version { + major: VERSION.0, + minor: VERSION.1, + } +} + #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "type")] pub enum PacketC { Version { minor: u32, major: u32, - supports_bincode: bool, }, Joined { id: PlayerID, @@ -307,6 +323,20 @@ pub enum PacketC { uri: Vec, }, + VoteStarted { + initiated_by: PlayerID, + subject: VoteSubject, + message: Message, + }, + VoteUpdated { + total: usize, + agree: usize, + reject: usize, + }, + VoteEnded { + result: bool, + }, + /// For use in replay sessions only ReplayStart, ReplayStop, @@ -315,6 +345,21 @@ pub enum PacketC { Debug(DebugEvent), } +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case", tag = "action")] +pub enum VoteSubject { + StartGame { config: GameConfig }, + EndGame, + RestartGame, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct GameConfig { + pub map: String, + pub hand_count: Option, + pub timer: Option, +} + #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case", tag = "menu", content = "data")] pub enum Menu { -- cgit v1.3