From 6a78631ad471df7500bffd9458feada3b73bbe10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=88=AA=E5=AE=87?= <3364451258@qq.com> Date: Sun, 31 May 2026 00:05:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E7=BD=91=E7=BB=9C=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=20=E2=80=94=20GameMessage=20=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=20+=20NetworkSession?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- core/src/lib.rs | 2 ++ core/src/network.rs | 61 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 core/src/network.rs diff --git a/core/src/lib.rs b/core/src/lib.rs index 9712af1..53700bf 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -4,4 +4,6 @@ pub mod ai; pub mod board; pub mod rules; pub mod record; +pub mod llm; +pub mod network; pub mod types; diff --git a/core/src/network.rs b/core/src/network.rs new file mode 100644 index 0000000..efb0b74 --- /dev/null +++ b/core/src/network.rs @@ -0,0 +1,61 @@ +use serde::{Deserialize, Serialize}; + +/// 游戏网络消息 +#[derive(Debug, Clone, Serialize, Deserialize)] +pub enum GameMessage { + Move { x: usize, y: usize, turn: u32 }, + Undo { steps: u32 }, + Resign, + Chat(String), + Heartbeat, +} + +/// 网络连接角色 +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum NetworkRole { + Server, + Client, +} + +/// 网络会话配置 +#[derive(Debug, Clone)] +pub struct NetworkConfig { + pub role: NetworkRole, + pub bind_port: u16, + pub remote_addr: String, + pub remote_port: u16, +} + +/// 网络会话状态 +#[derive(Debug, Clone)] +pub struct NetworkSession { + pub role: NetworkRole, + pub is_connected: bool, + pub config: NetworkConfig, + pending_messages: Vec, +} + +impl NetworkSession { + pub fn new(config: NetworkConfig) -> Self { + Self { + role: config.role, + is_connected: false, + config, + pending_messages: Vec::new(), + } + } + + /// 发送消息 (实际 renet 集成在 gui 层处理) + pub fn enqueue_message(&mut self, msg: GameMessage) { + self.pending_messages.push(msg); + } + + /// 取出待发送的消息 + pub fn drain_messages(&mut self) -> Vec { + std::mem::take(&mut self.pending_messages) + } + + pub fn set_connected(&mut self, connected: bool) { + self.is_connected = connected; + } +}