diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-26 04:01:01 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-26 17:06:00 +0300 |
| commit | e9547a8e0de21d0ce81867b06511b68def16aff2 (patch) | |
| tree | 8a025301146434b79ff295ff0d0afc833c682502 /src/server/protocol.rs | |
| parent | 3aa7903d28f94e67c14dd5cad48bbe942fbef2e9 (diff) | |
feat: refine live config lifecycle
Diffstat (limited to 'src/server/protocol.rs')
| -rw-r--r-- | src/server/protocol.rs | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/src/server/protocol.rs b/src/server/protocol.rs index f3784a5e..ed0c6961 100644 --- a/src/server/protocol.rs +++ b/src/server/protocol.rs @@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize}; // --------------------------------------------------------------------------- /// Current protocol version. Bumped when wire format changes incompatibly. -pub const PROTOCOL_VERSION: u32 = 1; +pub const PROTOCOL_VERSION: u32 = 2; /// Maximum allowed frame payload size (2 MB). Frames larger than this are /// rejected to prevent denial-of-service via oversized length prefixes. @@ -209,6 +209,9 @@ pub enum ServerMessage { /// Base64-encoded clipboard data. data: String, }, + + /// Client-local sound config changed on disk; refresh it without reconnecting. + ReloadSoundConfig, } // --------------------------------------------------------------------------- @@ -476,7 +479,7 @@ mod tests { #[test] fn client_hello_roundtrip() { let msg = ClientMessage::Hello { - version: 1, + version: PROTOCOL_VERSION, cols: 80, rows: 24, }; @@ -520,7 +523,7 @@ mod tests { #[test] fn server_welcome_roundtrip() { let msg = ServerMessage::Welcome { - version: 1, + version: PROTOCOL_VERSION, error: None, }; let encoded = bincode::serde::encode_to_vec(&msg, bincode::config::standard()).unwrap(); @@ -532,7 +535,7 @@ mod tests { #[test] fn server_welcome_with_error_roundtrip() { let msg = ServerMessage::Welcome { - version: 1, + version: PROTOCOL_VERSION, error: Some("incompatible version".to_owned()), }; let encoded = bincode::serde::encode_to_vec(&msg, bincode::config::standard()).unwrap(); @@ -638,12 +641,21 @@ mod tests { assert_eq!(msg, decoded); } + #[test] + fn server_reload_sound_config_roundtrip() { + let msg = ServerMessage::ReloadSoundConfig; + let encoded = bincode::serde::encode_to_vec(&msg, bincode::config::standard()).unwrap(); + let (decoded, _): (ServerMessage, _) = + bincode::serde::decode_from_slice(&encoded, bincode::config::standard()).unwrap(); + assert_eq!(msg, decoded); + } + // ---- Framing ---- #[test] fn framing_small_message_roundtrip() { let msg = ClientMessage::Hello { - version: 1, + version: PROTOCOL_VERSION, cols: 80, rows: 24, }; @@ -708,7 +720,7 @@ mod tests { for i in 0..150u32 { let msg = match i % 4 { 0 => ClientMessage::Hello { - version: 1, + version: PROTOCOL_VERSION, cols: (80 + (i % 40) as u16), rows: (24 + (i % 20) as u16), }, @@ -820,22 +832,19 @@ mod tests { #[test] fn version_compatible() { - assert_eq!(check_client_version(1), VersionCheck::Compatible); + assert_eq!( + check_client_version(PROTOCOL_VERSION), + VersionCheck::Compatible + ); } #[test] fn version_older_client_rejected() { - match check_client_version(1) { - VersionCheck::Compatible => {} // current version - _ => panic!("current version should be compatible"), + let result = check_client_version(PROTOCOL_VERSION - 1); + assert!(matches!(result, VersionCheck::Incompatible(_))); + if let VersionCheck::Incompatible(msg) = result { + assert!(msg.contains("older"), "error should mention older version"); } - // If we imagine a future server version 2, a v1 client would be rejected. - // We test this by checking the logic directly. - let result = check_client_version(0); - assert!( - matches!(result, VersionCheck::Incompatible(_)), - "version 0 should be incompatible" - ); } #[test] @@ -1119,7 +1128,7 @@ mod tests { fn read_message_accepts_exact_payload() { // A normally-framed message should decode without error. let msg = ClientMessage::Hello { - version: 1, + version: PROTOCOL_VERSION, cols: 80, rows: 24, }; @@ -1149,7 +1158,7 @@ mod tests { let messages = vec