diff options
| author | Weicao-CatilGrass <1992414357@qq.com> | 2025-04-22 02:06:55 +0800 |
|---|---|---|
| committer | Weicao-CatilGrass <1992414357@qq.com> | 2025-04-22 02:06:55 +0800 |
| commit | b8076fc657d86b41945d3f5a528a9ff6544795f9 (patch) | |
| tree | 56be7a3e5b527a650e762cc2def5731f9bcdd124 /core/src/message_encoder.rs | |
| parent | 6621b7fdfce8e5b754f9af24e122f6b327d27399 (diff) | |
完善消息编码器
Diffstat (limited to 'core/src/message_encoder.rs')
| -rw-r--r-- | core/src/message_encoder.rs | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/core/src/message_encoder.rs b/core/src/message_encoder.rs index e6e10b2..0ef7fc8 100644 --- a/core/src/message_encoder.rs +++ b/core/src/message_encoder.rs @@ -1,7 +1,47 @@ -use crate::messages::PlayerMessage; +use crate::constants::{BINCODE_CONFIG, BINCODE_CONVERT_FAILED}; +use crate::messages::{ClientMessage, PlayerMessage, ServerCallbackMessage, ServerMessage}; +use std::fmt::Debug; +use bincode::{Decode, Encode}; -impl PlayerMessage { - pub fn encode (&self) { - // +pub trait LazyMessageEncoder<Message: Encode + Decode<()>> { + fn err_result_decode () -> Message; + fn err_result_encode () -> Vec<u8> { + BINCODE_CONVERT_FAILED + } + + fn encode (&self) -> Vec<u8> where Self : Encode { + bincode::encode_to_vec(self, BINCODE_CONFIG) + .unwrap_or_else(|_| Self::err_result_encode()) + } + + fn decode (encoded : Vec<u8>) -> Message { + match bincode::decode_from_slice(&encoded[..], BINCODE_CONFIG) { + Ok((decoded, _)) => decoded, + Err(_) => Self::err_result_decode() + } + } +} + +impl LazyMessageEncoder<PlayerMessage> for PlayerMessage { + fn err_result_decode() -> PlayerMessage { + PlayerMessage::Error + } +} + +impl LazyMessageEncoder<ServerMessage> for ServerMessage { + fn err_result_decode() -> ServerMessage { + ServerMessage::Error + } +} + +impl LazyMessageEncoder<ClientMessage> for ClientMessage { + fn err_result_decode() -> ClientMessage { + ClientMessage::Error + } +} + +impl LazyMessageEncoder<ServerCallbackMessage> for ServerCallbackMessage { + fn err_result_decode() -> ServerCallbackMessage { + ServerCallbackMessage::Error } }
\ No newline at end of file |
