diff options
| author | 1992414357@qq.com <1992414357@qq.com> | 2025-06-11 19:14:04 +0800 |
|---|---|---|
| committer | 1992414357@qq.com <1992414357@qq.com> | 2025-06-11 19:14:04 +0800 |
| commit | 9e48af01ae56fe813869ada24de291ab98b361e2 (patch) | |
| tree | 82b56adecbeb260ebbf2c512d78fe2d63805eb36 /core/src/data | |
| parent | aa326e69b18a4390ffbc97268eaec4793761f083 (diff) | |
组合模块中 structs.rs 和 implements.rs 文件
Diffstat (limited to 'core/src/data')
23 files changed, 161 insertions, 188 deletions
diff --git a/core/src/data/controller/cli/mod.rs b/core/src/data/controller/cli/mod.rs deleted file mode 100644 index 043f7b8..0000000 --- a/core/src/data/controller/cli/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod cli_command;
\ No newline at end of file diff --git a/core/src/data/controller/cli/cli_command.rs b/core/src/data/controller/controller_cli.rs index 9fee0b0..9ab49d6 100644 --- a/core/src/data/controller/cli/cli_command.rs +++ b/core/src/data/controller/controller_cli.rs @@ -3,7 +3,7 @@ use clap::{Args, Parser, Subcommand}; use clearscreen::clear; use log::info; use nogamepads::entry_mutex; -use crate::data::controller::runtime::structs::ControllerRuntime; +use crate::data::controller::controller_runtime::ControllerRuntime; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] diff --git a/core/src/data/controller/implements.rs b/core/src/data/controller/controller_data.rs index 86a19de..a3f1c02 100644 --- a/core/src/data/controller/implements.rs +++ b/core/src/data/controller/controller_data.rs @@ -1,7 +1,15 @@ use std::sync::{Arc, Mutex}; -use crate::data::controller::runtime::structs::ControllerRuntime; -use crate::data::controller::structs::ControllerData; -use crate::data::player::structs::Player; +use crate::data::controller::controller_runtime::ControllerRuntime; +use crate::data::player::player_data::Player; + +/// Controller-side Data +/// Describes the basic information of the controller side +#[derive(Default)] +pub struct ControllerData { + + /// Player bound to the controller side + pub(crate) player: Player +} impl ControllerData { diff --git a/core/src/data/controller/runtime/implements.rs b/core/src/data/controller/controller_runtime.rs index 1f2734a..5e7bb6d 100644 --- a/core/src/data/controller/runtime/implements.rs +++ b/core/src/data/controller/controller_runtime.rs @@ -1,11 +1,28 @@ use std::collections::{HashMap, VecDeque}; +use std::sync::atomic::AtomicBool; use std::sync::atomic::Ordering::SeqCst; use log::trace; -use crate::data::controller::runtime::structs::ControllerRuntime; -use crate::data::message::enums::{ControlMessage, GameMessage}; +use crate::data::game::types::GameInfo; +use crate::data::message::message_enums::{ControlMessage, GameMessage}; use crate::data::message::traits::MessageManager; +use crate::data::player::player_data::Player; use crate::service::service_types::ServiceType; +/// Controller-side runtime +/// Stores all data involved in game pad_client interactions during runtime +#[derive(Default)] +pub struct ControllerRuntime { + + pub(crate) service_type: ServiceType, + pub(crate) received: HashMap<(ServiceType, u8), VecDeque<GameMessage>>, + pub(crate) send: HashMap<(ServiceType, u8), VecDeque<ControlMessage>>, + + pub(crate) player: Player, + + pub game_info: GameInfo, + pub close: AtomicBool, +} + /// Message manager for controller-side runtime /// After the service starts, it can be accessed or relevant messages can be stored. impl MessageManager<GameMessage, ControlMessage, u8> for ControllerRuntime { diff --git a/core/src/data/controller/mod.rs b/core/src/data/controller/mod.rs index 019ebcf..ce9d9c3 100644 --- a/core/src/data/controller/mod.rs +++ b/core/src/data/controller/mod.rs @@ -1,4 +1,3 @@ -pub mod cli; -pub mod runtime; -pub mod implements; -pub mod structs;
\ No newline at end of file +pub mod controller_cli; +pub mod controller_runtime; +pub mod controller_data;
\ No newline at end of file diff --git a/core/src/data/controller/runtime/mod.rs b/core/src/data/controller/runtime/mod.rs deleted file mode 100644 index 0ff870f..0000000 --- a/core/src/data/controller/runtime/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod implements; -pub mod structs;
\ No newline at end of file diff --git a/core/src/data/controller/runtime/structs.rs b/core/src/data/controller/runtime/structs.rs deleted file mode 100644 index bfd39c5..0000000 --- a/core/src/data/controller/runtime/structs.rs +++ /dev/null @@ -1,21 +0,0 @@ -use std::collections::{HashMap, VecDeque}; -use std::sync::atomic::AtomicBool; -use crate::data::game::types::GameInfo; -use crate::data::message::enums::{ControlMessage, GameMessage}; -use crate::data::player::structs::Player; -use crate::service::service_types::ServiceType; - -/// Controller-side runtime -/// Stores all data involved in game pad_client interactions during runtime -#[derive(Default)] -pub struct ControllerRuntime { - - pub(crate) service_type: ServiceType, - pub(crate) received: HashMap<(ServiceType, u8), VecDeque<GameMessage>>, - pub(crate) send: HashMap<(ServiceType, u8), VecDeque<ControlMessage>>, - - pub(crate) player: Player, - - pub game_info: GameInfo, - pub close: AtomicBool, -}
\ No newline at end of file diff --git a/core/src/data/controller/structs.rs b/core/src/data/controller/structs.rs deleted file mode 100644 index c6fdd31..0000000 --- a/core/src/data/controller/structs.rs +++ /dev/null @@ -1,10 +0,0 @@ -use crate::data::player::structs::Player; - -/// Controller-side Data -/// Describes the basic information of the controller side -#[derive(Default)] -pub struct ControllerData { - - /// Player bound to the controller side - pub(crate) player: Player -}
\ No newline at end of file diff --git a/core/src/data/game/cli/mod.rs b/core/src/data/game/cli/mod.rs deleted file mode 100644 index 043f7b8..0000000 --- a/core/src/data/game/cli/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod cli_command;
\ No newline at end of file diff --git a/core/src/data/game/cli/cli_command.rs b/core/src/data/game/game_cli.rs index 5f296f8..521de3f 100644 --- a/core/src/data/game/cli/cli_command.rs +++ b/core/src/data/game/game_cli.rs @@ -3,8 +3,8 @@ use clap::{Args, Parser, Subcommand}; use clearscreen::clear; use log::{info, warn}; use nogamepads::entry_mutex; -use crate::data::game::runtime::structs::GameRuntime; -use crate::data::player::structs::Player; +use crate::data::game::game_runtime::GameRuntime; +use crate::data::player::player_data::Player; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] diff --git a/core/src/data/game/implements.rs b/core/src/data/game/game_data.rs index ad86572..3bdf28b 100644 --- a/core/src/data/game/implements.rs +++ b/core/src/data/game/game_data.rs @@ -1,9 +1,35 @@ +use std::collections::HashMap; use std::sync::{Arc, Mutex}; +use serde::{Deserialize, Serialize}; use nogamepads::entry_mutex; -use crate::data::game::runtime::structs::{GameControlRuntime, GameRuntime, GameRuntimeData}; -use crate::data::game::structs::{GameControlData, GameData, GameRuntimeDataArchive}; +use crate::data::game::game_runtime::{GameControlRuntime, GameRuntime, GameRuntimeData}; use crate::data::game::types::{GameInfo, Players}; -use crate::data::player::structs::Player; +use crate::data::player::player_data::{Account, Player}; + +/// Game pad_client data +/// Describes the basic information of the game pad_client +#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)] +pub struct GameData { + pub info: GameInfo, + pub control: GameControlData, + pub archive: GameRuntimeDataArchive +} + +/// Game control information +/// Describes the buttons, axes, and directions that can be controlled. +#[derive(Default, Clone, Serialize, Deserialize, PartialEq, Debug)] +pub struct GameControlData { + pub direction_keys : HashMap<u8, String>, + pub axis_keys : HashMap<u8, String>, + pub button_keys : HashMap<u8, String>, +} + +/// Archive of game runtime data +/// The game pad_client can convert data into this structure for persistence. +#[derive(Default, Clone, Serialize, Deserialize, PartialEq, Debug)] +pub struct GameRuntimeDataArchive { + pub banned: Vec<Account> +} impl Default for GameData { fn default() -> Self { diff --git a/core/src/data/game/runtime/implements.rs b/core/src/data/game/game_runtime.rs index 22b6a5d..1c5a548 100644 --- a/core/src/data/game/runtime/implements.rs +++ b/core/src/data/game/game_runtime.rs @@ -1,20 +1,55 @@ use std::collections::{HashMap, VecDeque}; use std::sync::atomic::AtomicBool; use std::sync::atomic::Ordering::SeqCst; +use std::sync::Mutex; use log::{info, trace, warn}; use nogamepads::entry_mutex; -use crate::data::game::runtime::structs::{GameControlRuntime, GameRuntime, GameRuntimeData}; -use crate::data::game::types::Players; -use crate::data::message::enums::{JoinFailedMessage, ControlMessage, ExitReason, GameMessage}; -use crate::data::message::enums::JoinFailedMessage::{ContainIdenticalPlayer, GameLocked, PlayerBanned}; -use crate::data::message::enums::ControlMessage::{Axis, Dir, Msg, Pressed, Released}; -use crate::data::message::enums::ExitReason::{YouAreBanned, YouAreKicked}; -use crate::data::message::enums::GameMessage::{EventTrigger, LetExit}; +use crate::data::game::game_data::GameControlData; +use crate::data::game::types::{GameInfo, Players}; +use crate::data::message::message_enums::{JoinFailedMessage, ControlMessage, ExitReason, GameMessage}; +use crate::data::message::message_enums::JoinFailedMessage::{ContainIdenticalPlayer, GameLocked, PlayerBanned}; +use crate::data::message::message_enums::ControlMessage::{Axis, Dir, Msg, Pressed, Released}; +use crate::data::message::message_enums::ExitReason::{YouAreBanned, YouAreKicked}; +use crate::data::message::message_enums::GameMessage::{EventTrigger, LetExit}; use crate::data::message::traits::MessageManager; -use crate::data::player::structs::{Account, Player}; +use crate::data::player::player_data::{Account, Player}; use crate::service::service_types::ServiceType; use crate::service::service_types::ServiceType::TCPConnection; +/// Game pad_client runtime +/// Stores the game state, player information, and all data involved in controller-side interactions during runtime +pub struct GameRuntime { + + pub info: GameInfo, + pub data: GameRuntimeData, + pub control: GameControlRuntime, + + pub writer_count: i32, + pub reader_count: i32, +} + +pub struct GameRuntimeData { + + pub(crate) received: HashMap<(ServiceType, Account), VecDeque<(Account, ControlMessage)>>, + pub(crate) send: HashMap<(ServiceType, Account), VecDeque<(Account, GameMessage)>>, + + pub(crate) players_online: Players, + pub(crate) players_banned: Players, + pub(crate) account_service_type: Mutex<HashMap<Account, ServiceType>>, + + pub locked: AtomicBool, + pub close: AtomicBool, +} + +#[derive(Default)] +pub struct GameControlRuntime { + pub(crate) keys: GameControlData, + pub(crate) directions : HashMap<u8, HashMap<Account, (f64, f64)>>, + pub(crate) axes : HashMap<u8, HashMap<Account, f64>>, + pub(crate) button : HashMap<u8, HashMap<Account, bool>>, + pub(crate) events : VecDeque<(Account, ControlMessage)> +} + impl GameRuntime { /// Attempt to have the specified player join the game diff --git a/core/src/data/game/mod.rs b/core/src/data/game/mod.rs index 4a0a3d4..1a31cf1 100644 --- a/core/src/data/game/mod.rs +++ b/core/src/data/game/mod.rs @@ -1,6 +1,5 @@ -pub mod cli; -pub mod runtime; +pub mod game_cli; -pub mod implements; -pub mod structs; +pub mod game_data; +pub mod game_runtime; pub mod types;
\ No newline at end of file diff --git a/core/src/data/game/runtime/mod.rs b/core/src/data/game/runtime/mod.rs deleted file mode 100644 index 0ff870f..0000000 --- a/core/src/data/game/runtime/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod implements; -pub mod structs;
\ No newline at end of file diff --git a/core/src/data/game/runtime/structs.rs b/core/src/data/game/runtime/structs.rs deleted file mode 100644 index c6e005f..0000000 --- a/core/src/data/game/runtime/structs.rs +++ /dev/null @@ -1,42 +0,0 @@ -use std::collections::{HashMap, VecDeque}; -use std::sync::atomic::AtomicBool; -use std::sync::Mutex; -use crate::data::game::structs::GameControlData; -use crate::data::game::types::{GameInfo, Players}; -use crate::data::message::enums::{ControlMessage, GameMessage}; -use crate::data::player::structs::Account; -use crate::service::service_types::ServiceType; - -/// Game pad_client runtime -/// Stores the game state, player information, and all data involved in controller-side interactions during runtime -pub struct GameRuntime { - - pub info: GameInfo, - pub data: GameRuntimeData, - pub control: GameControlRuntime, - - pub writer_count: i32, - pub reader_count: i32, -} - -pub struct GameRuntimeData { - - pub(crate) received: HashMap<(ServiceType, Account), VecDeque<(Account, ControlMessage)>>, - pub(crate) send: HashMap<(ServiceType, Account), VecDeque<(Account, GameMessage)>>, - - pub(crate) players_online: Players, - pub(crate) players_banned: Players, - pub(crate) account_service_type: Mutex<HashMap<Account, ServiceType>>, - - pub locked: AtomicBool, - pub close: AtomicBool, -} - -#[derive(Default)] -pub struct GameControlRuntime { - pub(crate) keys: GameControlData, - pub(crate) directions : HashMap<u8, HashMap<Account, (f64, f64)>>, - pub(crate) axes : HashMap<u8, HashMap<Account, f64>>, - pub(crate) button : HashMap<u8, HashMap<Account, bool>>, - pub(crate) events : VecDeque<(Account, ControlMessage)> -}
\ No newline at end of file diff --git a/core/src/data/game/structs.rs b/core/src/data/game/structs.rs deleted file mode 100644 index 52fc0f1..0000000 --- a/core/src/data/game/structs.rs +++ /dev/null @@ -1,29 +0,0 @@ -use std::collections::HashMap; -use serde::{Deserialize, Serialize}; -use crate::data::game::types::GameInfo; -use crate::data::player::structs::Account; - -/// Game pad_client data -/// Describes the basic information of the game pad_client -#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)] -pub struct GameData { - pub info: GameInfo, - pub control: GameControlData, - pub archive: GameRuntimeDataArchive -} - -/// Game control information -/// Describes the buttons, axes, and directions that can be controlled. -#[derive(Default, Clone, Serialize, Deserialize, PartialEq, Debug)] -pub struct GameControlData { - pub direction_keys : HashMap<u8, String>, - pub axis_keys : HashMap<u8, String>, - pub button_keys : HashMap<u8, String>, -} - -/// Archive of game runtime data -/// The game pad_client can convert data into this structure for persistence. -#[derive(Default, Clone, Serialize, Deserialize, PartialEq, Debug)] -pub struct GameRuntimeDataArchive { - pub banned: Vec<Account> -}
\ No newline at end of file diff --git a/core/src/data/game/types.rs b/core/src/data/game/types.rs index 8af17d3..778201f 100644 --- a/core/src/data/game/types.rs +++ b/core/src/data/game/types.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; use std::sync::Mutex; -use crate::data::player::structs::{Account, Player}; +use crate::data::player::player_data::{Account, Player}; pub(crate) type GameInfo = HashMap<String, String>; diff --git a/core/src/data/message/implements.rs b/core/src/data/message/message_encoders.rs index 2d5bae8..d20e74a 100644 --- a/core/src/data/message/implements.rs +++ b/core/src/data/message/message_encoders.rs @@ -1,4 +1,4 @@ -use crate::data::message::enums::{ConnectionResponseMessage, JoinFailedMessage, ConnectionMessage, ControlMessage, ExitReason, GameMessage}; +use crate::data::message::message_enums::{ConnectionResponseMessage, JoinFailedMessage, ConnectionMessage, ControlMessage, ExitReason, GameMessage}; use crate::data::message::traits::MessageEncoder; #[macro_export] diff --git a/core/src/data/message/enums.rs b/core/src/data/message/message_enums.rs index 4150b63..fd369a9 100644 --- a/core/src/data/message/enums.rs +++ b/core/src/data/message/message_enums.rs @@ -1,6 +1,6 @@ -use crate::data::player::structs::Player; use bincode::{Decode, Encode}; use crate::data::game::types::GameInfo; +use crate::data::player::player_data::Player; /// Control messages. /// Messages sent from controller to game pad_client after establishing persistent connection diff --git a/core/src/data/message/mod.rs b/core/src/data/message/mod.rs index 96fdd73..1b9d2fd 100644 --- a/core/src/data/message/mod.rs +++ b/core/src/data/message/mod.rs @@ -1,3 +1,3 @@ -pub mod enums; -pub mod implements; +pub mod message_encoders; +pub mod message_enums; pub mod traits;
\ No newline at end of file diff --git a/core/src/data/player/mod.rs b/core/src/data/player/mod.rs index 7e8fe28..ff6ae85 100644 --- a/core/src/data/player/mod.rs +++ b/core/src/data/player/mod.rs @@ -1,4 +1,3 @@ -pub mod implements; -pub mod structs; +pub mod player_data; pub const ACCOUNT_HASH_SALT : &str = env!("TEST_PLAYER_ACCOUNT");
\ No newline at end of file diff --git a/core/src/data/player/implements.rs b/core/src/data/player/player_data.rs index bbaefc4..1fe5ff0 100644 --- a/core/src/data/player/implements.rs +++ b/core/src/data/player/player_data.rs @@ -1,11 +1,54 @@ -use crate::data::player::structs::{Account, Customize, Player}; use crate::data::player::ACCOUNT_HASH_SALT; use hex::encode; use sha1::{Digest, Sha1}; use std::fmt::{Display, Formatter}; use std::hash::{Hash, Hasher}; +use bincode::{Decode, Encode}; +use serde::{Deserialize, Serialize}; use nogamepads::string_utils::process_id_text; +/// Player information +/// Describes a player's specific details, which are frequently exchanged between the controller and game pad_client. +#[derive(Default, Clone, Encode, Decode, Serialize, Deserialize, Debug)] +pub struct Player { + + /// Account information + pub account: Account, + + /// Custom information (Optional) + pub customize: Option<Customize> +} + +/// Account information +/// Essential data for verifying player uniqueness, including the player's hash value and account ID. +#[derive(Default, Clone, Encode, Decode, Serialize, Deserialize, Eq, Hash, PartialEq, Debug)] +pub struct Account { + + /// Player name stored in data, allowing only lowercase letters and underscores + pub id: String, + + /// Player hash value proving player uniqueness + pub player_hash: String +} + +/// Custom information +/// Describes personalized player details displayed in-game, such as name, color, or other customizations. +#[derive(Default, Clone, Encode, Decode, Serialize, Deserialize, PartialEq, Debug)] +pub struct Customize { + + /// Player name displayed in the game + pub nickname: String, + + /// HSV Color - Hue (Range: 0 - 360) + pub color_hue: i32, + + /// HSV Color - Saturation (Range: 0 - 1) + pub color_saturation: f64, + + /// HSV Color - Value (Range: 0 - 1) + pub color_value: f64 +} + impl Player { /// Create new player information using a username and password diff --git a/core/src/data/player/structs.rs b/core/src/data/player/structs.rs deleted file mode 100644 index cc3d7c9..0000000 --- a/core/src/data/player/structs.rs +++ /dev/null @@ -1,45 +0,0 @@ -use bincode::{Decode, Encode}; -use serde::{Deserialize, Serialize}; -use std::hash::{Hash}; - -/// Player information -/// Describes a player's specific details, which are frequently exchanged between the controller and game pad_client. -#[derive(Default, Clone, Encode, Decode, Serialize, Deserialize, Debug)] -pub struct Player { - - /// Account information - pub account: Account, - - /// Custom information (Optional) - pub customize: Option<Customize> -} - -/// Account information -/// Essential data for verifying player uniqueness, including the player's hash value and account ID. -#[derive(Default, Clone, Encode, Decode, Serialize, Deserialize, Eq, Hash, PartialEq, Debug)] -pub struct Account { - - /// Player name stored in data, allowing only lowercase letters and underscores - pub id: String, - - /// Player hash value proving player uniqueness - pub player_hash: String -} - -/// Custom information -/// Describes personalized player details displayed in-game, such as name, color, or other customizations. -#[derive(Default, Clone, Encode, Decode, Serialize, Deserialize, PartialEq, Debug)] -pub struct Customize { - - /// Player name displayed in the game - pub nickname: String, - - /// HSV Color - Hue (Range: 0 - 360) - pub color_hue: i32, - - /// HSV Color - Saturation (Range: 0 - 1) - pub color_saturation: f64, - - /// HSV Color - Value (Range: 0 - 1) - pub color_value: f64 -}
\ No newline at end of file |
