aboutsummaryrefslogtreecommitdiff
path: root/core/src/server
diff options
context:
space:
mode:
author1992414357@qq.com <1992414357@qq.com>2025-04-21 06:25:54 +0800
committer1992414357@qq.com <1992414357@qq.com>2025-04-21 06:25:54 +0800
commit50ea9869616846e5a0448ead8272c397080f36d8 (patch)
tree5f2ec829ecf48441a6d33f4160909dc02ddf83bf /core/src/server
parentd72d700c84794ca420035ceb9c294563f3f9c048 (diff)
.
Diffstat (limited to 'core/src/server')
-rw-r--r--core/src/server/mod.rs3
-rw-r--r--core/src/server/server.rs56
-rw-r--r--core/src/server/server_commands.rs37
-rw-r--r--core/src/server/server_event.rs36
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);
+}
+