aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/state.rs
diff options
context:
space:
mode:
authorKapten Z∅∅m <55669224+default-username-852@users.noreply.github.com>2021-01-07 22:22:24 +0100
committerGitHub <noreply@github.com>2021-01-07 22:22:24 +0100
commit154a2930b3bbe5ede06648c3a10b8fa4904277f4 (patch)
tree18ee2f8b569991d1d0e6b6248539f70da63a62d7 /mumd/src/state.rs
parentba4aa72654f2d57d59f6e25151315213bec21192 (diff)
parent62d3e3d6bf3842a1aad28874a69992b0b880137e (diff)
downloadmum-154a2930b3bbe5ede06648c3a10b8fa4904277f4.tar.gz
Merge pull request #58 from mum-rs/tcp-voice-tunnel-2
TCP voice tunnel
Diffstat (limited to 'mumd/src/state.rs')
-rw-r--r--mumd/src/state.rs34
1 files changed, 19 insertions, 15 deletions
diff --git a/mumd/src/state.rs b/mumd/src/state.rs
index 84247bc..2ed73b2 100644
--- a/mumd/src/state.rs
+++ b/mumd/src/state.rs
@@ -3,11 +3,11 @@ pub mod server;
pub mod user;
use crate::audio::{Audio, NotificationEvents};
-use crate::network::ConnectionInfo;
+use crate::network::{ConnectionInfo, VoiceStreamType};
+use crate::network::tcp::{TcpEvent, TcpEventData};
use crate::notify;
use crate::state::server::Server;
-use crate::network::tcp::{TcpEvent, TcpEventData};
use log::*;
use mumble_protocol::control::msgs;
use mumble_protocol::control::ControlPacket;
@@ -45,11 +45,11 @@ pub enum ExecutionContext {
),
}
-#[derive(Clone, Debug, Eq, PartialEq)]
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum StatePhase {
Disconnected,
Connecting,
- Connected,
+ Connected(VoiceStreamType),
}
pub struct State {
@@ -85,7 +85,7 @@ impl State {
) -> ExecutionContext {
match command {
Command::ChannelJoin { channel_identifier } => {
- if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
return now!(Err(Error::DisconnectedError));
}
@@ -135,7 +135,7 @@ impl State {
now!(Ok(None))
}
Command::ChannelList => {
- if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
return now!(Err(Error::DisconnectedError));
}
let list = channel::into_channel(
@@ -149,7 +149,7 @@ impl State {
now!(Ok(None))
}
Command::DeafenSelf(toggle) => {
- if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
return now!(Err(Error::DisconnectedError));
}
@@ -207,7 +207,7 @@ impl State {
now!(Ok(None))
}
Command::MuteOther(string, toggle) => {
- if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
return now!(Err(Error::DisconnectedError));
}
@@ -242,7 +242,7 @@ impl State {
return now!(Ok(None));
}
Command::MuteSelf(toggle) => {
- if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
return now!(Err(Error::DisconnectedError));
}
@@ -354,7 +354,7 @@ impl State {
})
}
Command::ServerDisconnect => {
- if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
return now!(Err(Error::DisconnectedError));
}
@@ -388,7 +388,7 @@ impl State {
}),
),
Command::Status => {
- if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
return now!(Err(Error::DisconnectedError));
}
let state = self.server.as_ref().unwrap().into();
@@ -397,7 +397,7 @@ impl State {
})))
}
Command::UserVolumeSet(string, volume) => {
- if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
return now!(Err(Error::DisconnectedError));
}
let user_id = match self
@@ -448,7 +448,7 @@ impl State {
self.audio_mut().add_client(session);
// send notification only if we've passed the connecting phase
- if *self.phase_receiver().borrow() == StatePhase::Connected {
+ if matches!(*self.phase_receiver().borrow(), StatePhase::Connected(_)) {
let channel_id = msg.get_channel_id();
if channel_id
@@ -578,11 +578,15 @@ impl State {
}
}
- pub fn initialized(&self) {
+ pub fn broadcast_phase(&self, phase: StatePhase) {
self.phase_watcher
.0
- .send(StatePhase::Connected)
+ .send(phase)
.unwrap();
+ }
+
+ pub fn initialized(&self) {
+ self.broadcast_phase(StatePhase::Connected(VoiceStreamType::TCP));
self.audio.play_effect(NotificationEvents::ServerConnect);
}