From b583f6dbe521e01e879e16605026997dfa10c3d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Tue, 13 Oct 2020 02:31:09 +0200 Subject: join different channels Co-authored-by: Eskil Queseth --- mumd/src/main.rs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'mumd/src/main.rs') diff --git a/mumd/src/main.rs b/mumd/src/main.rs index 2a0fcbd..a08db44 100644 --- a/mumd/src/main.rs +++ b/mumd/src/main.rs @@ -2,21 +2,22 @@ mod audio; mod network; mod command; mod state; -use crate::audio::Audio; -use crate::state::Server; +use crate::state::State; use argparse::ArgumentParser; use argparse::Store; use argparse::StoreTrue; use colored::*; -use cpal::traits::StreamTrait; use futures::channel::oneshot; use futures::join; use log::*; +use mumble_protocol::control::ControlPacket; use mumble_protocol::crypt::ClientCryptState; +use mumble_protocol::voice::Serverbound; use std::net::ToSocketAddrs; use std::sync::Arc; use std::sync::Mutex; +use tokio::sync::mpsc; #[tokio::main] async fn main() { @@ -73,28 +74,24 @@ async fn main() { // Oneshot channel for setting UDP CryptState from control task // For simplicity we don't deal with re-syncing, real applications would have to. let (crypt_state_sender, crypt_state_receiver) = oneshot::channel::(); + let (packet_sender, packet_receiver) = mpsc::channel::>(10); - let audio = Audio::new(); - audio.output_stream.play().unwrap(); - let audio = Arc::new(Mutex::new(audio)); - - let server_state = Arc::new(Mutex::new(Server::new())); + let state = Arc::new(Mutex::new(State::new(packet_sender, username))); // Run it join!( network::tcp::handle( - server_state, + Arc::clone(&state), server_addr, server_host, - username, accept_invalid_cert, crypt_state_sender, - Arc::clone(&audio), + packet_receiver, ), network::udp::handle( + state, server_addr, crypt_state_receiver, - audio, ), ); } -- cgit v1.2.1