Add a channel for replies to Player across thread

This commit is contained in:
Muaz Ahmad 2024-11-25 16:39:42 +05:00
parent ba45cbf8fe
commit b2169abc94
4 changed files with 45 additions and 8 deletions

View file

@ -8,7 +8,7 @@ use std::{
use std::sync::mpsc::Receiver;
use crate::{config::Settings, utils::Error};
use crate::{config::Settings, player::PlayerEvent, utils::Error};
pub enum AudioEvent {}
@ -16,11 +16,13 @@ pub struct SoundManager {
settings: Arc<Settings>,
error_chan: Sender<Error>,
audio_controls: Receiver<AudioEvent>,
player_chan: Sender<PlayerEvent>,
}
pub fn init(
settings: Arc<Settings>,
error_chan: Sender<Error>,
player_chan: Sender<PlayerEvent>,
) -> Result<Sender<AudioEvent>, Error> {
let (audio_control_in, audio_control_out) = channel();
thread::spawn(|| {
@ -28,6 +30,7 @@ pub fn init(
settings,
error_chan,
audio_controls: audio_control_out,
player_chan,
};
loop {}
});

View file

@ -11,13 +11,17 @@ mod utils;
fn init() -> Result<Receiver<utils::Error>, utils::Error> {
let settings = config::init()?;
let (error_in, error_out) = channel();
let audio_event_chan = audio::init(settings.clone(), error_in.clone())?;
let api_event_chan = ssonic::init(settings.clone(), error_in.clone())?;
let (player_events_in, player_events_out) = channel();
let audio_event_chan =
audio::init(settings.clone(), error_in.clone(), player_events_in.clone())?;
let api_event_chan =
ssonic::init(settings.clone(), error_in.clone(), player_events_in.clone())?;
let mut player = player::init(
settings.clone(),
audio_event_chan,
api_event_chan,
error_in.clone(),
player_events_out,
)?;
player.begin()?;
Ok(error_out)

View file

@ -1,7 +1,12 @@
use std::sync::{mpsc::Sender, Arc};
use std::sync::{
mpsc::{Receiver, Sender},
Arc,
};
use crate::{audio::AudioEvent, config::Settings, ssonic::APIEvent, utils::Error};
pub struct PlayerEvent {}
pub struct Player {}
pub fn init(
@ -9,6 +14,7 @@ pub fn init(
audio_chan: Sender<AudioEvent>,
api_chan: Sender<APIEvent>,
error_chan: Sender<Error>,
player_chan: Receiver<PlayerEvent>,
) -> Result<Player, Error> {
unimplemented!()
}

View file

@ -1,9 +1,33 @@
use std::sync::{mpsc::Sender, Arc};
use std::{
sync::{
mpsc::{channel, Receiver, Sender},
Arc,
},
thread,
};
use crate::{config::Settings, utils::Error};
use crate::{config::Settings, player::PlayerEvent, utils::Error};
pub enum APIEvent {}
pub fn init(settings: Arc<Settings>, error_chan: Sender<Error>) -> Result<Sender<APIEvent>, Error> {
unimplemented!()
pub struct APIClient {
settings: Arc<Settings>,
error_chan: Sender<Error>,
api_requests: Receiver<APIEvent>,
player_chan: Sender<PlayerEvent>,
}
pub fn init(
settings: Arc<Settings>,
error_chan: Sender<Error>,
player_chan: Sender<PlayerEvent>,
) -> Result<Sender<APIEvent>, Error> {
let (api_requests_in, api_requests_out) = channel();
thread::spawn(|| APIClient {
settings,
error_chan,
api_requests: api_requests_out,
player_chan,
});
Ok(api_requests_in)
}