mirror of
https://github.com/LHY0125/Gobang-Game.git
synced 2026-06-28 16:35:55 +08:00
feat(core): 网络模块 — GameMessage 协议定义 + NetworkSession
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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<GameMessage>,
|
||||
}
|
||||
|
||||
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<GameMessage> {
|
||||
std::mem::take(&mut self.pending_messages)
|
||||
}
|
||||
|
||||
pub fn set_connected(&mut self, connected: bool) {
|
||||
self.is_connected = connected;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user