aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/command.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-10-13 17:05:22 +0200
committerGustav Sörnäs <gustav@sornas.net>2020-10-13 17:05:22 +0200
commit503f6c90395682bf5d7fd3fb8a79bfcfc3c2f329 (patch)
tree41dd58465f1afbeb583262eb383fdcb50c256337 /mumd/src/command.rs
parentcd353c875c3c8bcae4f4ece597468728341362c9 (diff)
downloadmum-503f6c90395682bf5d7fd3fb8a79bfcfc3c2f329.tar.gz
wait for complete state before sending commands
Diffstat (limited to 'mumd/src/command.rs')
-rw-r--r--mumd/src/command.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/mumd/src/command.rs b/mumd/src/command.rs
index 322bde8..1f7a781 100644
--- a/mumd/src/command.rs
+++ b/mumd/src/command.rs
@@ -1,3 +1,9 @@
+use crate::state::State;
+
+use std::sync::{Arc, Mutex};
+use tokio::sync::mpsc;
+
+#[derive(Debug)]
pub enum Command {
ChannelJoin {
channel_id: u32,
@@ -12,3 +18,16 @@ pub enum Command {
ServerDisconnect,
Status,
}
+
+pub async fn handle(
+ state: Arc<Mutex<State>>,
+ mut command_receiver: mpsc::UnboundedReceiver<Command>,
+) {
+ // wait until we can send packages
+ let mut initialized_receiver = state.lock().unwrap().initialized_receiver();
+ while matches!(initialized_receiver.recv().await, Some(false)) {}
+
+ while let Some(command) = command_receiver.recv().await {
+ state.lock().unwrap().handle_command(command).await;
+ }
+}