Change the UpdateListener API to me more ergonomic
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
6e596a2ef3
commit
cc1a5bb09d
@ -611,7 +611,7 @@ impl SectionRunner {
|
||||
self.addr.send(Subscribe).map_err(From::from)
|
||||
}
|
||||
|
||||
pub fn state_receiver(&self) -> SecRunnerStateRecv {
|
||||
pub fn get_state_recv(&self) -> SecRunnerStateRecv {
|
||||
self.state_recv.clone()
|
||||
}
|
||||
}
|
||||
|
@ -160,18 +160,9 @@ pub struct UpdateListener {
|
||||
}
|
||||
|
||||
impl UpdateListener {
|
||||
pub fn start(
|
||||
section_events: SectionEventRecv,
|
||||
program_events: ProgramEventRecv,
|
||||
sec_runner_state: SecRunnerStateRecv,
|
||||
mqtt_interface: MqttInterface,
|
||||
) -> Self {
|
||||
pub fn start(mqtt_interface: MqttInterface) -> Self {
|
||||
let addr = UpdateListenerActor { mqtt_interface }.start();
|
||||
let mut l = Self { addr };
|
||||
l.listen(section_events);
|
||||
l.listen(program_events);
|
||||
l.listen(sec_runner_state);
|
||||
l
|
||||
Self { addr }
|
||||
}
|
||||
|
||||
fn listen<L: 'static>(&mut self, listener: L)
|
||||
@ -181,6 +172,18 @@ impl UpdateListener {
|
||||
self.addr.do_send(Listen(listener));
|
||||
}
|
||||
|
||||
pub fn listen_section_events(&mut self, section_events: SectionEventRecv) {
|
||||
self.listen(section_events);
|
||||
}
|
||||
|
||||
pub fn listen_program_events(&mut self, program_events: ProgramEventRecv) {
|
||||
self.listen(program_events);
|
||||
}
|
||||
|
||||
pub fn listen_section_runner(&mut self, sec_runner_state_recv: SecRunnerStateRecv) {
|
||||
self.listen(sec_runner_state_recv);
|
||||
}
|
||||
|
||||
pub async fn quit(self) -> eyre::Result<()> {
|
||||
Ok(self.addr.send(Quit).await?)
|
||||
}
|
||||
|
@ -3,9 +3,9 @@
|
||||
|
||||
// mod option_future;
|
||||
|
||||
use sprinklers_actors as actors;
|
||||
use sprinklers_core::section_interface::MockSectionInterface;
|
||||
use sprinklers_database as database;
|
||||
use sprinklers_actors as actors;
|
||||
use sprinklers_mqtt as mqtt;
|
||||
|
||||
use eyre::Result;
|
||||
@ -56,17 +56,10 @@ async fn main() -> Result<()> {
|
||||
};
|
||||
let mut mqtt_interface = mqtt::MqttInterfaceTask::start(mqtt_options, request_context);
|
||||
|
||||
let update_listener = {
|
||||
let section_events = section_runner.subscribe().await?;
|
||||
let program_events = program_runner.subscribe().await?;
|
||||
let sec_runner_state = section_runner.state_receiver();
|
||||
mqtt::UpdateListener::start(
|
||||
section_events,
|
||||
program_events,
|
||||
sec_runner_state,
|
||||
mqtt_interface.clone(),
|
||||
)
|
||||
};
|
||||
let mut update_listener = mqtt::UpdateListener::start(mqtt_interface.clone());
|
||||
update_listener.listen_section_events(section_runner.subscribe().await?);
|
||||
update_listener.listen_section_runner(section_runner.get_state_recv());
|
||||
update_listener.listen_program_events(program_runner.subscribe().await?);
|
||||
|
||||
program_runner.update_sections(sections.clone()).await?;
|
||||
// TODO: update listener should probably do this
|
||||
|
Loading…
x
Reference in New Issue
Block a user