aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/main.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-10-13 17:05:22 +0200
committerGustav Sörnäs <gustav@sornas.net>2020-10-13 17:05:22 +0200
commit503f6c90395682bf5d7fd3fb8a79bfcfc3c2f329 (patch)
tree41dd58465f1afbeb583262eb383fdcb50c256337 /mumd/src/main.rs
parentcd353c875c3c8bcae4f4ece597468728341362c9 (diff)
downloadmum-503f6c90395682bf5d7fd3fb8a79bfcfc3c2f329.tar.gz
wait for complete state before sending commands
Diffstat (limited to 'mumd/src/main.rs')
-rw-r--r--mumd/src/main.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/mumd/src/main.rs b/mumd/src/main.rs
index a08db44..6d8d9bf 100644
--- a/mumd/src/main.rs
+++ b/mumd/src/main.rs
@@ -2,7 +2,9 @@ mod audio;
mod network;
mod command;
mod state;
+
use crate::state::State;
+use crate::command::Command;
use argparse::ArgumentParser;
use argparse::Store;
@@ -15,13 +17,13 @@ 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 std::sync::{Arc, Mutex};
use tokio::sync::mpsc;
#[tokio::main]
async fn main() {
// setup logger
+ //TODO? add newline before message if it contains newlines
fern::Dispatch::new()
.format(|out, message, record| {
out.finish(format_args!(
@@ -74,9 +76,12 @@ 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 (packet_sender, packet_receiver) = mpsc::unbounded_channel::<ControlPacket<Serverbound>>();
+ let (command_sender, command_receiver) = mpsc::unbounded_channel::<Command>();
- let state = Arc::new(Mutex::new(State::new(packet_sender, username)));
+ command_sender.send(Command::ChannelJoin{channel_id: 1}).unwrap();
+ let state = State::new(packet_sender, command_sender, username);
+ let state = Arc::new(Mutex::new(state));
// Run it
join!(
@@ -89,9 +94,13 @@ async fn main() {
packet_receiver,
),
network::udp::handle(
- state,
+ Arc::clone(&state),
server_addr,
crypt_state_receiver,
),
+ command::handle(
+ state,
+ command_receiver,
+ ),
);
}