From a32511e0b70288cad6d4915b30956f3eb8728149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 1 Jan 2021 17:32:07 +0100 Subject: move mumble backend code to new client --- mumd/src/client.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 mumd/src/client.rs (limited to 'mumd/src/client.rs') diff --git a/mumd/src/client.rs b/mumd/src/client.rs new file mode 100644 index 0000000..74e744f --- /dev/null +++ b/mumd/src/client.rs @@ -0,0 +1,52 @@ +use crate::command; +use crate::network::{tcp, udp, ConnectionInfo}; +use crate::state::State; + +use futures_util::join; +use ipc_channel::ipc::IpcSender; +use mumble_protocol::{Serverbound, control::ControlPacket, crypt::ClientCryptState}; +use mumlib::command::{Command, CommandResponse}; +use std::sync::{Arc, Mutex}; +use tokio::sync::{mpsc, watch}; + +pub async fn handle( + command_receiver: mpsc::UnboundedReceiver<( + Command, + IpcSender>>, + )>, +) { + let (connection_info_sender, connection_info_receiver) = + watch::channel::>(None); + let (crypt_state_sender, crypt_state_receiver) = + mpsc::channel::(1); + let (packet_sender, packet_receiver) = + mpsc::unbounded_channel::>(); + let (ping_request_sender, ping_request_receiver) = + mpsc::unbounded_channel(); + let (response_sender, response_receiver) = + mpsc::unbounded_channel(); + + let state = State::new(packet_sender, connection_info_sender); + let state = Arc::new(Mutex::new(state)); + join!( + tcp::handle( + Arc::clone(&state), + connection_info_receiver.clone(), + crypt_state_sender, + packet_receiver, + response_receiver, + ), + udp::handle( + Arc::clone(&state), + connection_info_receiver.clone(), + crypt_state_receiver, + ), + command::handle( + state, + command_receiver, + response_sender, + ping_request_sender, + ), + udp::handle_pings(ping_request_receiver), + ); +} -- cgit v1.2.1