From 5d05d292ddb7f8b28b71abd46930028b6e66dfde Mon Sep 17 00:00:00 2001 From: Eskil Queseth Date: Wed, 19 May 2021 02:27:27 +0200 Subject: add support for sending multiple responses --- mumd/src/command.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'mumd/src/command.rs') diff --git a/mumd/src/command.rs b/mumd/src/command.rs index d101104..a1e8b21 100644 --- a/mumd/src/command.rs +++ b/mumd/src/command.rs @@ -5,13 +5,13 @@ use log::*; use mumble_protocol::{Serverbound, control::ControlPacket}; use mumlib::command::{Command, CommandResponse}; use std::sync::{atomic::{AtomicU64, Ordering}, Arc, RwLock}; -use tokio::sync::{mpsc, oneshot, watch}; +use tokio::sync::{mpsc, watch}; pub async fn handle( state: Arc>, mut command_receiver: mpsc::UnboundedReceiver<( Command, - oneshot::Sender>>, + mpsc::UnboundedSender>>, )>, tcp_event_queue: TcpEventQueue, ping_request_sender: mpsc::UnboundedSender, @@ -20,13 +20,13 @@ pub async fn handle( ) { debug!("Begin listening for commands"); let ping_count = AtomicU64::new(0); - while let Some((command, response_sender)) = command_receiver.recv().await { + while let Some((command, mut response_sender)) = command_receiver.recv().await { debug!("Received command {:?}", command); let mut state = state.write().unwrap(); let event = state.handle_command(command, &mut packet_sender, &mut connection_info_sender); drop(state); match event { - ExecutionContext::TcpEvent(event, generator) => { + ExecutionContext::TcpEventCallback(event, generator) => { tcp_event_queue.register_callback( event, Box::new(move |e| { @@ -35,6 +35,14 @@ pub async fn handle( }), ); } + ExecutionContext::TcpEventSubscriber(event, mut handler) => { + tcp_event_queue.register_subscriber( + event, + Box::new(move |event| { + handler(event, &mut response_sender) + }), + ) + } ExecutionContext::Now(generator) => { response_sender.send(generator()).unwrap(); } -- cgit v1.2.1