aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/main.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-10-13 02:31:09 +0200
committerGustav Sörnäs <gustav@sornas.net>2020-10-13 02:31:35 +0200
commitb583f6dbe521e01e879e16605026997dfa10c3d3 (patch)
treef318fbf00a47a30787b891094a522f313fd1d00b /mumd/src/main.rs
parent39c1ff5be55ade710bbe0fbe4701a070dadbb8e7 (diff)
downloadmum-b583f6dbe521e01e879e16605026997dfa10c3d3.tar.gz
join different channels
Co-authored-by: Eskil Queseth <eskilq@kth.se>
Diffstat (limited to 'mumd/src/main.rs')
-rw-r--r--mumd/src/main.rs21
1 files changed, 9 insertions, 12 deletions
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::<ClientCryptState>();
+ let (packet_sender, packet_receiver) = mpsc::channel::<ControlPacket<Serverbound>>(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,
),
);
}