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) { } }