diff options
Diffstat (limited to 'mumd/src/command.rs')
| -rw-r--r-- | mumd/src/command.rs | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/mumd/src/command.rs b/mumd/src/command.rs index a035a26..5285a9d 100644 --- a/mumd/src/command.rs +++ b/mumd/src/command.rs @@ -1,10 +1,11 @@ -use crate::state::{State, StatePhase}; +use crate::state::State; use ipc_channel::ipc::IpcSender; use log::*; use mumlib::command::{Command, CommandResponse}; use std::sync::{Arc, Mutex}; -use tokio::sync::mpsc; +use tokio::sync::{mpsc, oneshot}; +use crate::network::tcp::{TcpEvent, TcpEventCallback}; pub async fn handle( state: Arc<Mutex<State>>, @@ -12,23 +13,26 @@ pub async fn handle( Command, IpcSender<mumlib::error::Result<Option<CommandResponse>>>, )>, + tcp_event_register_sender: mpsc::UnboundedSender<(TcpEvent, TcpEventCallback)>, ) { debug!("Begin listening for commands"); - while let Some(command) = command_receiver.recv().await { - debug!("Received command {:?}", command.0); - let mut state = state.lock().unwrap(); - let (wait_for_connected, command_response) = state.handle_command(command.0).await; - if wait_for_connected { - let mut watcher = state.phase_receiver(); - drop(state); - while !matches!(watcher.recv().await.unwrap(), StatePhase::Connected) {} + while let Some((command, response_sender)) = command_receiver.recv().await { + debug!("Received command {:?}", command); + let mut statee = state.lock().unwrap(); + let (event_data, command_response) = statee.handle_command(command).await; + drop(statee); + if let Some((event, callback)) = event_data { + let (tx, rx) = oneshot::channel(); + tcp_event_register_sender.send((event, Box::new(move |e| { + println!("något hände"); + callback(e); + response_sender.send(command_response).unwrap(); + tx.send(()); + }))); + + rx.await; + } else { + response_sender.send(command_response).unwrap(); } - command.1.send(command_response).unwrap(); } - //TODO err if not connected - //while let Some(command) = command_receiver.recv().await { - // debug!("Parsing command {:?}", command); - //} - - //debug!("Finished handling commands"); } |
