From 0749ca1d7e18caf38ea0ea5f82e02256a3c571c5 Mon Sep 17 00:00:00 2001 From: Weicao-CatilGrass <1992414357@qq.com> Date: Tue, 22 Apr 2025 00:42:42 +0800 Subject: 修改测试 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/message_encoder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/src/message_encoder.rs') diff --git a/core/src/message_encoder.rs b/core/src/message_encoder.rs index cda7382..e6e10b2 100644 --- a/core/src/message_encoder.rs +++ b/core/src/message_encoder.rs @@ -2,6 +2,6 @@ use crate::messages::PlayerMessage; impl PlayerMessage { pub fn encode (&self) { - + // } } \ No newline at end of file -- cgit From b8076fc657d86b41945d3f5a528a9ff6544795f9 Mon Sep 17 00:00:00 2001 From: Weicao-CatilGrass <1992414357@qq.com> Date: Tue, 22 Apr 2025 02:06:55 +0800 Subject: 完善消息编码器 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/message_encoder.rs | 48 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) (limited to 'core/src/message_encoder.rs') 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> { + fn err_result_decode () -> Message; + fn err_result_encode () -> Vec { + BINCODE_CONVERT_FAILED + } + + fn encode (&self) -> Vec where Self : Encode { + bincode::encode_to_vec(self, BINCODE_CONFIG) + .unwrap_or_else(|_| Self::err_result_encode()) + } + + fn decode (encoded : Vec) -> Message { + match bincode::decode_from_slice(&encoded[..], BINCODE_CONFIG) { + Ok((decoded, _)) => decoded, + Err(_) => Self::err_result_decode() + } + } +} + +impl LazyMessageEncoder for PlayerMessage { + fn err_result_decode() -> PlayerMessage { + PlayerMessage::Error + } +} + +impl LazyMessageEncoder for ServerMessage { + fn err_result_decode() -> ServerMessage { + ServerMessage::Error + } +} + +impl LazyMessageEncoder for ClientMessage { + fn err_result_decode() -> ClientMessage { + ClientMessage::Error + } +} + +impl LazyMessageEncoder for ServerCallbackMessage { + fn err_result_decode() -> ServerCallbackMessage { + ServerCallbackMessage::Error } } \ No newline at end of file -- cgit