Add publishing of section states
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Alex Mikhalev 2020-09-27 18:27:14 -06:00
parent 239a289e4e
commit cfde268603
2 changed files with 23 additions and 0 deletions

View File

@ -11,6 +11,7 @@ mod section_interface;
mod section_runner;
#[cfg(test)]
mod trace_listeners;
mod update_listener;
use eyre::Result;
use std::sync::Arc;
@ -64,6 +65,11 @@ async fn main() -> Result<()> {
program_runner.update_sections(sections.clone()).await?;
mqtt_interface.publish_sections(&sections).await?;
for section_id in sections.keys() {
mqtt_interface
.publish_section_state(*section_id, false)
.await?;
}
program_runner.update_programs(programs.clone()).await?;
mqtt_interface.publish_programs(&programs).await?;

View File

@ -37,6 +37,10 @@ where
format!("{}/sections/{}", self.prefix.as_ref(), section_id)
}
fn section_state(&self, section_id: SectionId) -> String {
format!("{}/sections/{}/state", self.prefix.as_ref(), section_id)
}
fn programs(&self) -> String {
format!("{}/programs", self.prefix.as_ref())
}
@ -160,6 +164,19 @@ impl MqttInterface {
Ok(())
}
pub async fn publish_section_state(&mut self, section_id: SectionId, state: bool) -> eyre::Result<()> {
let payload: Vec<u8> = state.to_string().into();
self.client
.publish(
self.topics.section_state(section_id),
QoS::AtLeastOnce,
true,
payload,
)
.await?;
Ok(())
}
pub async fn publish_programs(&mut self, programs: &Programs) -> eyre::Result<()> {
let program_ids: Vec<_> = programs.keys().cloned().collect();
let program_ids_payload = serde_json::to_vec(&program_ids)?;