aboutsummaryrefslogtreecommitdiffstats
path: root/src/audio_player.rs
diff options
context:
space:
mode:
authorJokler <jokler@protonmail.com>2020-01-30 15:55:41 +0100
committerJokler <jokler@protonmail.com>2020-02-22 23:20:10 +0100
commit757edd214f841e8d95e4c5430d7ead7a0e8fecbb (patch)
tree3d0721d1d1f73c9bc1fd5ac23aef505e1051d5e5 /src/audio_player.rs
parent2792ba9c8a7120a91b3bd2c6075e737690e73405 (diff)
downloadpokebot-757edd214f841e8d95e4c5430d7ead7a0e8fecbb.tar.gz
pokebot-757edd214f841e8d95e4c5430d7ead7a0e8fecbb.zip
Spawn actix-web server with access to the bot
Additionally replace all Mutexes with RwLocks. Hopefully this makes it possible for the web server to serve many requests at once since they would just hold read locks.
Diffstat (limited to 'src/audio_player.rs')
-rw-r--r--src/audio_player.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/audio_player.rs b/src/audio_player.rs
index 9ed645d..cdb04d7 100644
--- a/src/audio_player.rs
+++ b/src/audio_player.rs
@@ -10,7 +10,7 @@ use gstreamer_audio::{StreamVolume, StreamVolumeFormat};
use crate::bot::{MusicBotMessage, State};
use glib::BoolError;
use log::{debug, error, info, warn};
-use std::sync::{Arc, Mutex};
+use std::sync::{Arc, RwLock};
use tokio02::sync::mpsc::UnboundedSender;
static GST_INIT: Once = Once::new();
@@ -34,7 +34,7 @@ pub struct AudioPlayer {
http_src: gst::Element,
volume: gst::Element,
- sender: Arc<Mutex<UnboundedSender<MusicBotMessage>>>,
+ sender: Arc<RwLock<UnboundedSender<MusicBotMessage>>>,
}
fn make_element(factoryname: &str, display_name: &str) -> Result<gst::Element, AudioPlayerError> {
@@ -83,7 +83,7 @@ fn add_decode_bin_new_pad_callback(
impl AudioPlayer {
pub fn new(
- sender: Arc<Mutex<UnboundedSender<MusicBotMessage>>>,
+ sender: Arc<RwLock<UnboundedSender<MusicBotMessage>>>,
callback: Option<Box<dyn FnMut(&[u8]) + Send>>,
) -> Result<Self, AudioPlayerError> {
GST_INIT.call_once(|| gst::init().unwrap());
@@ -280,13 +280,13 @@ impl AudioPlayer {
warn!("Failed to send \"quit\" app event: {}", e);
}
- let sender = self.sender.lock().unwrap();
+ let sender = self.sender.read().unwrap();
sender.send(MusicBotMessage::Quit(reason)).unwrap();
}
fn send_state(&self, state: State) {
info!("Sending state {:?} to application", state);
- let sender = self.sender.lock().unwrap();
+ let sender = self.sender.read().unwrap();
sender.send(MusicBotMessage::StateChange(state)).unwrap();
}