use std::time::Duration; use bincode::{Decode, Encode}; use crate::player::player_info::PlayerInfo; /// # 玩家消息 /// 玩家 --> 服务器 #[derive(Encode, Decode, PartialEq, Debug)] pub enum PlayerMessage { /// 消息:发送字符串,服务端无需回复 Message(String), /// 命令:发送字符串,服务器必须回复 Command(String), /// 按钮按下:发送 u8 作为按键代号 ButtonPressed(u8), /// 按钮抬起:发送 u8 作为按键代号 ButtonReleased(u8), /// 轴向:发送 u8 作为轴向代号,两个 f64 分别代表 x 和 y 方向的轴向 /// u8:轴向代号 /// f64:X 轴向值 (0 - 1) /// f64:Y 轴向值 (0 - 1) Axis(u8, (f64, f64)), /// 错误消息 Error } /// # 服务器消息 /// 服务器 --> 玩家 #[derive(Encode, Decode, PartialEq, Debug)] pub enum ServerMessage { /// 命令:发送字符串,客户端处理 Command(String), /// 动画:发送字符串,客户端触发对应名称动画 Animation(String), /// 震动:发送 Duration 作为时长,f64 作为震动强度 (0 - 1) Shock(Duration, f64), /// 踢出:发送踢出指令,以便让客户端明白自己的掉线是因为被踢出 /// “杀人还要诛心!!!好可怕啊!” Kick, /// 错误消息 Error } /// # 客户端消息 /// 客户端 --> 服务器 #[derive(Encode, Decode, PartialEq, Debug)] pub enum ClientMessage { /// 连接请求,将和服务端建立连接,并通知服务器将要建立连接的玩家 ConnectRequest(PlayerInfo), /// 下载布局请求 RequestLayout, /// 下载皮肤请求 RequestSkin, /// 客户端准备就绪 Ready, /// 错误消息 Error } /// # 服务器回调消息 /// 服务器 --> 客户端 #[derive(Encode, Decode, PartialEq, Debug)] pub enum ServerCallbackMessage { /// 拒绝:发送消息已通知客户端请求被拒绝 Refuse, /// 接收:发送消息已通知客户端请求被接受,以继续操作 Accept, /// 欢迎:客户端准备完成后,服务端发送 Welcome 以允许客户端以玩家加入游戏 Welcome, /// 错误消息 Error }