diff options
| author | Eskil Queseth <eskilq@kth.se> | 2020-10-14 02:04:16 +0200 |
|---|---|---|
| committer | Eskil Queseth <eskilq@kth.se> | 2020-10-14 02:04:16 +0200 |
| commit | a3c393a711c71698ef833f1923374798cbb0d0b4 (patch) | |
| tree | 5348b8093ad1d5bf8b095d4e31d59f4e030c8ba8 /mumd/src/state.rs | |
| parent | 3d8009a0201fba0bdc464fae0797d3bb3bcf69f4 (diff) | |
| download | mum-a3c393a711c71698ef833f1923374798cbb0d0b4.tar.gz | |
fix code so that it doesn't deadlock
Diffstat (limited to 'mumd/src/state.rs')
| -rw-r--r-- | mumd/src/state.rs | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/mumd/src/state.rs b/mumd/src/state.rs index 8689a9a..84e78f0 100644 --- a/mumd/src/state.rs +++ b/mumd/src/state.rs @@ -50,26 +50,26 @@ impl State { } } - pub async fn handle_command(&mut self, command: Command) -> Result<Option<CommandResponse>, ()> { + pub async fn handle_command(&mut self, command: Command) -> (bool, Result<Option<CommandResponse>, ()>) { match command { Command::ChannelJoin{channel_id} => { if self.session_id.is_none() { warn!("Tried to join channel but we don't have a session id"); - return Err(()); + return (false, Err(())); } let mut msg = msgs::UserState::new(); msg.set_session(self.session_id.unwrap()); msg.set_channel_id(channel_id); self.packet_sender.send(msg.into()).unwrap(); - Ok(None) + (false, Ok(None)) } Command::ChannelList => { - Ok(Some(CommandResponse::ChannelList{channels: self.server.channels.clone()})) + (false, Ok(Some(CommandResponse::ChannelList{channels: self.server.channels.clone()}))) } Command::ServerConnect{host, port, username, accept_invalid_cert} => { if !matches!(*self.phase_receiver().borrow(), StatePhase::Disconnected) { warn!("Tried to connect to a server while already connected"); - return Err(()); + return (false, Err(())); } self.username = Some(username); self.phase_watcher.0.broadcast(StatePhase::Connecting).unwrap(); @@ -83,10 +83,9 @@ impl State { host, accept_invalid_cert, ))); - while !matches!(self.phase_receiver().recv().await.unwrap(), StatePhase::Connected) {} - Ok(None) + (true, Ok(None)) } - _ => { Ok(None) } + _ => { (true, Ok(None)) } } } |
