aboutsummaryrefslogtreecommitdiff
path: root/core/src/data/controller/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/data/controller/runtime')
-rw-r--r--core/src/data/controller/runtime/implements.rs29
-rw-r--r--core/src/data/controller/runtime/mod.rs2
-rw-r--r--core/src/data/controller/runtime/structs.rs20
3 files changed, 51 insertions, 0 deletions
diff --git a/core/src/data/controller/runtime/implements.rs b/core/src/data/controller/runtime/implements.rs
new file mode 100644
index 0000000..b79890e
--- /dev/null
+++ b/core/src/data/controller/runtime/implements.rs
@@ -0,0 +1,29 @@
+use std::collections::{HashMap, VecDeque};
+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::message::traits::MessageManager;
+use crate::service::service_types::ServiceType;
+
+/// 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 {
+ fn borrow_received_list_mut(&mut self) -> &mut HashMap<(ServiceType, u8), VecDeque<GameMessage>> {
+ &mut self.received
+ }
+
+ fn borrow_send_list_mut(&mut self) -> &mut HashMap<(ServiceType, u8), VecDeque<ControlMessage>> {
+ &mut self.send
+ }
+}
+
+impl ControllerRuntime {
+
+ pub fn close(&mut self) {
+ if !self.close.load(SeqCst) {
+ self.close.store(true, SeqCst);
+ trace!("[Controller Runtime] Closed.");
+ }
+ }
+} \ No newline at end of file
diff --git a/core/src/data/controller/runtime/mod.rs b/core/src/data/controller/runtime/mod.rs
new file mode 100644
index 0000000..0ff870f
--- /dev/null
+++ b/core/src/data/controller/runtime/mod.rs
@@ -0,0 +1,2 @@
+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
new file mode 100644
index 0000000..7be2cd6
--- /dev/null
+++ b/core/src/data/controller/runtime/structs.rs
@@ -0,0 +1,20 @@
+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) 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