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)
|
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()
|
self.state_recv.clone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,18 +160,9 @@ pub struct UpdateListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl UpdateListener {
|
impl UpdateListener {
|
||||||
pub fn start(
|
pub fn start(mqtt_interface: MqttInterface) -> Self {
|
||||||
section_events: SectionEventRecv,
|
|
||||||
program_events: ProgramEventRecv,
|
|
||||||
sec_runner_state: SecRunnerStateRecv,
|
|
||||||
mqtt_interface: MqttInterface,
|
|
||||||
) -> Self {
|
|
||||||
let addr = UpdateListenerActor { mqtt_interface }.start();
|
let addr = UpdateListenerActor { mqtt_interface }.start();
|
||||||
let mut l = Self { addr };
|
Self { addr }
|
||||||
l.listen(section_events);
|
|
||||||
l.listen(program_events);
|
|
||||||
l.listen(sec_runner_state);
|
|
||||||
l
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn listen<L: 'static>(&mut self, listener: L)
|
fn listen<L: 'static>(&mut self, listener: L)
|
||||||
@ -181,6 +172,18 @@ impl UpdateListener {
|
|||||||
self.addr.do_send(Listen(listener));
|
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<()> {
|
pub async fn quit(self) -> eyre::Result<()> {
|
||||||
Ok(self.addr.send(Quit).await?)
|
Ok(self.addr.send(Quit).await?)
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
// mod option_future;
|
// mod option_future;
|
||||||
|
|
||||||
|
use sprinklers_actors as actors;
|
||||||
use sprinklers_core::section_interface::MockSectionInterface;
|
use sprinklers_core::section_interface::MockSectionInterface;
|
||||||
use sprinklers_database as database;
|
use sprinklers_database as database;
|
||||||
use sprinklers_actors as actors;
|
|
||||||
use sprinklers_mqtt as mqtt;
|
use sprinklers_mqtt as mqtt;
|
||||||
|
|
||||||
use eyre::Result;
|
use eyre::Result;
|
||||||
@ -56,17 +56,10 @@ async fn main() -> Result<()> {
|
|||||||
};
|
};
|
||||||
let mut mqtt_interface = mqtt::MqttInterfaceTask::start(mqtt_options, request_context);
|
let mut mqtt_interface = mqtt::MqttInterfaceTask::start(mqtt_options, request_context);
|
||||||
|
|
||||||
let update_listener = {
|
let mut update_listener = mqtt::UpdateListener::start(mqtt_interface.clone());
|
||||||
let section_events = section_runner.subscribe().await?;
|
update_listener.listen_section_events(section_runner.subscribe().await?);
|
||||||
let program_events = program_runner.subscribe().await?;
|
update_listener.listen_section_runner(section_runner.get_state_recv());
|
||||||
let sec_runner_state = section_runner.state_receiver();
|
update_listener.listen_program_events(program_runner.subscribe().await?);
|
||||||
mqtt::UpdateListener::start(
|
|
||||||
section_events,
|
|
||||||
program_events,
|
|
||||||
sec_runner_state,
|
|
||||||
mqtt_interface.clone(),
|
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
||||||
program_runner.update_sections(sections.clone()).await?;
|
program_runner.update_sections(sections.clone()).await?;
|
||||||
// TODO: update listener should probably do this
|
// TODO: update listener should probably do this
|
||||||
|
Loading…
x
Reference in New Issue
Block a user