aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/main.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2020-10-14 01:48:07 +0200
committerGustav Sörnäs <gustav@sornas.net>2020-10-14 01:48:07 +0200
commit3d8009a0201fba0bdc464fae0797d3bb3bcf69f4 (patch)
treec831804fa1e4e20d1152b4051f276feb67ed0881 /mumd/src/main.rs
parent50f5f273426d805025a9336398862529b6bb9b60 (diff)
downloadmum-3d8009a0201fba0bdc464fae0797d3bb3bcf69f4.tar.gz
wip handle more commands (panics)
Diffstat (limited to 'mumd/src/main.rs')
-rw-r--r--mumd/src/main.rs35
1 files changed, 22 insertions, 13 deletions
diff --git a/mumd/src/main.rs b/mumd/src/main.rs
index 6d8d9bf..93bb0d0 100644
--- a/mumd/src/main.rs
+++ b/mumd/src/main.rs
@@ -3,8 +3,9 @@ mod network;
mod command;
mod state;
+use crate::network::ConnectionInfo;
+use crate::command::{Command, CommandResponse};
use crate::state::State;
-use crate::command::Command;
use argparse::ArgumentParser;
use argparse::Store;
@@ -16,9 +17,8 @@ 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, Mutex};
-use tokio::sync::mpsc;
+use tokio::sync::{mpsc, watch};
#[tokio::main]
async fn main() {
@@ -67,40 +67,49 @@ async fn main() {
);
ap.parse_args_or_exit();
}
- let server_addr = (server_host.as_ref(), server_port)
- .to_socket_addrs()
- .expect("Failed to parse server address")
- .next()
- .expect("Failed to resolve server address");
// 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::unbounded_channel::<ControlPacket<Serverbound>>();
let (command_sender, command_receiver) = mpsc::unbounded_channel::<Command>();
+ let (command_response_sender, command_response_receiver) = mpsc::unbounded_channel::<Result<Option<CommandResponse>, ()>>();
+ let (connection_info_sender, connection_info_receiver) = watch::channel::<Option<ConnectionInfo>>(None);
+
+ command_sender.send(Command::ServerConnect{host: server_host, port: server_port, username: username.clone(), accept_invalid_cert});
command_sender.send(Command::ChannelJoin{channel_id: 1}).unwrap();
- let state = State::new(packet_sender, command_sender, username);
+ let state = State::new(packet_sender, command_sender.clone(), connection_info_sender, username);
let state = Arc::new(Mutex::new(state));
// Run it
join!(
network::tcp::handle(
Arc::clone(&state),
- server_addr,
- server_host,
- accept_invalid_cert,
+ connection_info_receiver.clone(),
crypt_state_sender,
packet_receiver,
),
network::udp::handle(
Arc::clone(&state),
- server_addr,
+ connection_info_receiver.clone(),
crypt_state_receiver,
),
command::handle(
state,
command_receiver,
+ command_response_sender,
+ ),
+ send_commands(
+ command_sender,
+ command_response_receiver,
),
);
}
+
+async fn send_commands(
+ command_sender: mpsc::UnboundedSender<Command>,
+ command_response_receiver: mpsc::UnboundedReceiver<Result<Option<CommandResponse>, ()>>,
+) {
+
+}