From d8dab41672fd757490dfbce44dfb3475ccc73b44 Mon Sep 17 00:00:00 2001 From: Weicao-CatilGrass <1992414357@qq.com> Date: Sat, 12 Apr 2025 13:47:00 +0800 Subject: 修改 gamepad_layouts.rs 名为 layouts.rs 合并 message.rs 到 player.rs 修改 phantom_link_server.rs 名为 server.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/gamepad_layouts.rs | 3 -- core/src/layouts.rs | 3 ++ core/src/lib.rs | 6 +-- core/src/message.rs | 7 ---- core/src/phantom_link_server.rs | 81 ----------------------------------------- core/src/player.rs | 48 +++++++++++++++++++++++- core/src/server.rs | 80 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 133 insertions(+), 95 deletions(-) delete mode 100644 core/src/gamepad_layouts.rs create mode 100644 core/src/layouts.rs delete mode 100644 core/src/message.rs delete mode 100644 core/src/phantom_link_server.rs create mode 100644 core/src/server.rs (limited to 'core/src') diff --git a/core/src/gamepad_layouts.rs b/core/src/gamepad_layouts.rs deleted file mode 100644 index 49c5808..0000000 --- a/core/src/gamepad_layouts.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub enum GamepadLayout { - PhantomLinkGamepad, Xbox -} \ No newline at end of file diff --git a/core/src/layouts.rs b/core/src/layouts.rs new file mode 100644 index 0000000..49c5808 --- /dev/null +++ b/core/src/layouts.rs @@ -0,0 +1,3 @@ +pub enum GamepadLayout { + PhantomLinkGamepad, Xbox +} \ No newline at end of file diff --git a/core/src/lib.rs b/core/src/lib.rs index 4988f50..e19c53d 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -1,4 +1,4 @@ -pub mod phantom_link_server; -pub mod gamepad_layouts; +pub mod server; +pub mod layouts; pub mod player; -pub mod message; \ No newline at end of file +mod constants; \ No newline at end of file diff --git a/core/src/message.rs b/core/src/message.rs deleted file mode 100644 index d146dba..0000000 --- a/core/src/message.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::player::PlayerInfo; - -pub enum PlayerMessage { - Say(&'static str), - PressedDown(char), - PressedUp(char) -} \ No newline at end of file diff --git a/core/src/phantom_link_server.rs b/core/src/phantom_link_server.rs deleted file mode 100644 index 6dcbdeb..0000000 --- a/core/src/phantom_link_server.rs +++ /dev/null @@ -1,81 +0,0 @@ -use crate::gamepad_layouts::GamepadLayout; -use crate::message::PlayerMessage; -use crate::player::PlayerInfo; - -/// # PhantomLink 监听服务器 -/// 监听服务器用于连接玩家设备,并接收玩家的按键输入 -pub struct PLServer { - server_name: &'static str, - port: u16, - layout: GamepadLayout -} - -/// # PhantomLink 监听服务器事件 -/// 服务器运行过程中的信息将会发送到该 Event Trait -pub trait PLServerEvent { - - /// 服务器启动时 - fn server_start(); - - /// 服务器关闭时 - fn server_shutdown(); - - /// 玩家加入请求 - /// info : 玩家信息 - /// return -> 是否允许加入 - fn request_received(info: PlayerInfo) -> bool; - - /// 玩家加入游戏 - /// info : 玩家信息 - fn player_joined(info: PlayerInfo); - - /// 玩家离开游戏 - /// info : 玩家信息 - fn player_left(info: PlayerInfo); - - /// 玩家断开连接 - /// info : 玩家信息 - fn player_disconnected(info: PlayerInfo); - - /// 接收到消息 - /// info : 玩家信息 - /// msg : 接受的消息 - fn msg_received(info: PlayerInfo, msg: PlayerMessage); -} - -impl Default for PLServer { - /// # 使用默认布局部署服务器 - /// 创建一个使用默认布局的服务器 - fn default() -> Self { - PLServer { - server_name: "PhantomLink Layout", - port: 8916, - layout: GamepadLayout::PhantomLinkGamepad - } - } -} - -impl PLServer { - /// # 使用 Xbox 布局部署服务器 - /// 创建一个使用 Xbox 布局的服务器 - pub fn xbox_layout() -> Self { - PLServer { - server_name: "Xbox Layout", - port: 8916, - layout: GamepadLayout::Xbox - } - } - - /// # 开始监听服务器 - /// self : 服务器 - /// event : 事件 - pub fn start_listening(&self, event : impl PLServerEvent) { - - } - - /// # 停止监听服务器 - /// self : 服务器 - pub fn stop_listening(&self) { - - } -} \ No newline at end of file diff --git a/core/src/player.rs b/core/src/player.rs index 01e47d0..78e4d23 100644 --- a/core/src/player.rs +++ b/core/src/player.rs @@ -1,8 +1,54 @@ use std::net::SocketAddr; +use sha1::{Digest, Sha1}; +use crate::constants::SALT; pub struct PlayerInfo { addr: SocketAddr, name: &'static str, name_hash: &'static str, - index: u8 + index: u8, + + // 颜色 HSV + color_hue: i32, // 0 - 360 + color_saturation: f32, // 0 - 1 + color_value: f32 // 0 - 1 +} + +pub enum PlayerMessage { + Say(&'static str), + PressedDown(char), + PressedUp(char) +} + +impl PlayerInfo { + + /// # 配置玩家 ID 和 名称 + /// self : 自身 + /// name : 玩家名称 + /// number : 玩家序号 + /// return -> 自身 + pub fn name(&mut self, name : &'static str, number : &'static str) -> &mut Self { + self.name = name; + + let combined = format!("{}{}{}", name, number, SALT); + let mut hasher = Sha1::new(); + hasher.update(combined); + let result = hasher.finalize(); + + self.name_hash = &format!("{:x}", &result[..16]); + self + } + + /// # 配置玩家颜色 + /// self : 自身 + /// hue : 色调 0 -> RED; 120 -> GREEN; 240 -> BLUE + /// saturation : 饱和度 + /// value : 明度 + /// return -> 自身 + pub fn color_hue(&mut self, hue: i32, saturation: f32, value: f32) -> &mut Self { + self.color_hue = hue.clamp(0, 360); + self.color_saturation = saturation.clamp(0.0, 1.0); + self.color_value = value.clamp(0.0, 1.0); + self + } } \ No newline at end of file diff --git a/core/src/server.rs b/core/src/server.rs new file mode 100644 index 0000000..d8b8df9 --- /dev/null +++ b/core/src/server.rs @@ -0,0 +1,80 @@ +use crate::layouts::GamepadLayout; +use crate::player::{PlayerInfo, PlayerMessage}; + +/// # PhantomLink 监听服务器 +/// 监听服务器用于连接玩家设备,并接收玩家的按键输入 +pub struct PLServer { + server_name: &'static str, + port: u16, + layout: GamepadLayout +} + +/// # PhantomLink 监听服务器事件 +/// 服务器运行过程中的信息将会发送到该 Event Trait +pub trait PLServerEvent { + + /// 服务器启动时 + fn server_start(); + + /// 服务器关闭时 + fn server_shutdown(); + + /// 玩家加入请求 + /// info : 玩家信息 + /// return -> 是否允许加入 + fn request_received(info: PlayerInfo) -> bool; + + /// 玩家加入游戏 + /// info : 玩家信息 + fn player_joined(info: PlayerInfo); + + /// 玩家离开游戏 + /// info : 玩家信息 + fn player_left(info: PlayerInfo); + + /// 玩家断开连接 + /// info : 玩家信息 + fn player_disconnected(info: PlayerInfo); + + /// 接收到消息 + /// info : 玩家信息 + /// msg : 接受的消息 + fn msg_received(info: PlayerInfo, msg: PlayerMessage); +} + +impl Default for PLServer { + /// # 使用默认布局部署服务器 + /// 创建一个使用默认布局的服务器 + fn default() -> Self { + PLServer { + server_name: "PhantomLink Layout", + port: 8916, + layout: GamepadLayout::PhantomLinkGamepad + } + } +} + +impl PLServer { + /// # 使用 Xbox 布局部署服务器 + /// 创建一个使用 Xbox 布局的服务器 + pub fn xbox_layout() -> Self { + PLServer { + server_name: "Xbox Layout", + port: 8916, + layout: GamepadLayout::Xbox + } + } + + /// # 开始监听服务器 + /// self : 服务器 + /// event : 事件 + pub fn start_listening(&self, event : impl PLServerEvent) { + + } + + /// # 停止监听服务器 + /// self : 服务器 + pub fn stop_listening(&self) { + + } +} \ No newline at end of file -- cgit