diff options
| author | Eskil Queseth <eskilq@kth.se> | 2020-10-14 17:45:04 +0200 |
|---|---|---|
| committer | Eskil Queseth <eskilq@kth.se> | 2020-10-14 17:45:04 +0200 |
| commit | ab0cdc240c65fdc6b764ed17f6611786d449acc3 (patch) | |
| tree | bbad07ff338616c17208cf257eb3c6d359eb857e /mumd/src/main.rs | |
| parent | e4406676a28f2dfb756f8f9e38a4242166f19c0e (diff) | |
| download | mum-ab0cdc240c65fdc6b764ed17f6611786d449acc3.tar.gz | |
add support for reconnecting to server
Diffstat (limited to 'mumd/src/main.rs')
| -rw-r--r-- | mumd/src/main.rs | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/mumd/src/main.rs b/mumd/src/main.rs index 812e7a1..6d435fa 100644 --- a/mumd/src/main.rs +++ b/mumd/src/main.rs @@ -11,7 +11,6 @@ use argparse::ArgumentParser; use argparse::Store; use argparse::StoreTrue; use colored::*; -use tokio::sync::oneshot; use futures::join; use log::*; use mumble_protocol::control::ControlPacket; @@ -72,16 +71,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 (crypt_state_sender, crypt_state_receiver) = mpsc::channel::<ClientCryptState>(1); // crypt state should always be consumed before sending a new one 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::ChannelList).unwrap(); - 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(); - command_sender.send(Command::ChannelList).unwrap(); let state = State::new(packet_sender, command_sender.clone(), connection_info_sender); let state = Arc::new(Mutex::new(state)); @@ -104,7 +99,8 @@ async fn main() { command_response_sender, ), send_commands( - command_sender + command_sender, + Command::ServerConnect{host: server_host, port: server_port, username: username.clone(), accept_invalid_cert} ), receive_command_responses( command_response_receiver, @@ -112,8 +108,13 @@ async fn main() { ); } -async fn send_commands(command_sender: mpsc::UnboundedSender<Command>) { - tokio::time::delay_for(Duration::from_secs(5)).await; +async fn send_commands(command_sender: mpsc::UnboundedSender<Command>, connect_command: Command) { + command_sender.send(connect_command.clone()); + tokio::time::delay_for(Duration::from_secs(2)).await; + command_sender.send(Command::ServerDisconnect); + tokio::time::delay_for(Duration::from_secs(2)).await; + command_sender.send(connect_command.clone()); + tokio::time::delay_for(Duration::from_secs(2)).await; command_sender.send(Command::ServerDisconnect); debug!("Finished sending commands"); |
