diff options
| author | 1992414357@qq.com <1992414357@qq.com> | 2025-04-21 06:25:54 +0800 |
|---|---|---|
| committer | 1992414357@qq.com <1992414357@qq.com> | 2025-04-21 06:25:54 +0800 |
| commit | 50ea9869616846e5a0448ead8272c397080f36d8 (patch) | |
| tree | 5f2ec829ecf48441a6d33f4160909dc02ddf83bf /core/src/server | |
| parent | d72d700c84794ca420035ceb9c294563f3f9c048 (diff) | |
.
Diffstat (limited to 'core/src/server')
| -rw-r--r-- | core/src/server/mod.rs | 3 | ||||
| -rw-r--r-- | core/src/server/server.rs | 56 | ||||
| -rw-r--r-- | core/src/server/server_commands.rs | 37 | ||||
| -rw-r--r-- | core/src/server/server_event.rs | 36 |
4 files changed, 132 insertions, 0 deletions
diff --git a/core/src/server/mod.rs b/core/src/server/mod.rs new file mode 100644 index 0000000..d7553a8 --- /dev/null +++ b/core/src/server/mod.rs @@ -0,0 +1,3 @@ +pub mod server; +pub mod server_commands; +pub mod server_event;
\ No newline at end of file diff --git a/core/src/server/server.rs b/core/src/server/server.rs new file mode 100644 index 0000000..c71892c --- /dev/null +++ b/core/src/server/server.rs @@ -0,0 +1,56 @@ +use crate::constants::DEFAULT_PORT; +use crate::server::server_event::PadServerEvent; +use std::net::{SocketAddr, UdpSocket}; + +/// # 监听服务器 +/// 监听服务器用于连接玩家设备,并接收玩家的按键输入 +pub struct PadServer { + server_name: String, + port: u16 +} + +impl Default for PadServer { + + /// # 使用默认布局部署服务器 + /// 创建一个使用默认布局的服务器 + fn default() -> Self { + PadServer { + server_name: String::from("This Is No Pads"), + port: DEFAULT_PORT + // TODO :: 补充布局文件 + } + } +} + +impl PadServer { + + /// # 开始监听服务器 + /// self : 服务器 + /// event : 事件 + pub fn start_listening(&self, event : impl PadServerEvent) { + let socket_addr = SocketAddr::from(([127, 0, 0, 1], self.port)); + match UdpSocket::bind(socket_addr) { + Ok(socket) => { + let mut buf = vec![0u8; 1024]; + + loop { + // 接收连接请求 + match socket.recv_from(&mut buf) { + Ok((size, src)) => { + + } + Err(_) => {} + } + } + } + + Err(_) => {} + } + } + + /// # 停止监听服务器 + /// self : 服务器 + pub fn stop_listening(&self) { + + } +}
\ No newline at end of file diff --git a/core/src/server/server_commands.rs b/core/src/server/server_commands.rs new file mode 100644 index 0000000..dcf40a3 --- /dev/null +++ b/core/src/server/server_commands.rs @@ -0,0 +1,37 @@ +use std::time::Duration; +use crate::messages::ServerMessage; +use crate::server::server::PadServer; + +impl PadServer { + + // TODO :: 可能需要返回是否成功 + pub fn send_message (&self, player_index: i32, msg: ServerMessage) { + + } + + // TODO :: 可能需要返回是否成功 + pub fn kick (&self, player_index: i32, ban: bool) { + self.send_message(player_index, ServerMessage::Kick); + + // TODO :: 封禁模式启动 + if ban { + + } + } + + pub fn shock (&self, player_index: i32, duration: Duration, value: f64) { + self.send_message(player_index, ServerMessage::Shock(duration, value)); + } + + pub fn set_ignore_control (&self, player_index: i32, ignore: bool) { + + } + + pub fn set_ignore_message (&self, player_index: i32, ignore: bool) { + + } + + pub fn set_ignore_command (&self, player_index: i32, ignore: bool) { + + } +}
\ No newline at end of file diff --git a/core/src/server/server_event.rs b/core/src/server/server_event.rs new file mode 100644 index 0000000..f63df5f --- /dev/null +++ b/core/src/server/server_event.rs @@ -0,0 +1,36 @@ +use crate::messages::PlayerMessage; +use crate::player::player_info::PlayerInfo; + +/// # 监听服务器事件 +/// 服务器运行过程中的信息将会发送到该 Event Trait +pub trait PadServerEvent { + + /// 服务器启动时 + fn server_start(); + + /// 服务器关闭时 + fn server_shutdown(); + + /// 玩家加入请求 + /// info : 玩家信息 + /// return -> 是否允许加入服务器 + fn join_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); +} + |
