pub use config::*;
pub use traits::*;
use crate::app::Shutdown;
use crate::decode::DecodeLevel;
use crate::outstation::database::{Database, DatabaseHandle};
use crate::outstation::task::{ConfigurationChange, OutstationMessage};
use crate::util::channel::Sender;
pub mod database;
mod config;
pub(crate) mod control;
pub(crate) mod deferred;
pub(crate) mod session;
pub(crate) mod task;
mod traits;
#[cfg(test)]
mod tests;
#[derive(Clone)]
pub struct OutstationHandle {
database: DatabaseHandle,
sender: Sender<OutstationMessage>,
}
impl OutstationHandle {
pub fn get_database_handle(&self) -> DatabaseHandle {
self.database.clone()
}
pub fn transaction<F, R>(&self, func: F) -> R
where
F: FnMut(&mut Database) -> R,
{
self.database.transaction(func)
}
pub async fn set_decode_level(&mut self, decode_level: DecodeLevel) -> Result<(), Shutdown> {
self.sender
.send(ConfigurationChange::SetDecodeLevel(decode_level).into())
.await?;
Ok(())
}
pub async fn enable(&mut self) -> Result<(), Shutdown> {
self.sender.send(OutstationMessage::Enable).await?;
Ok(())
}
pub async fn disable(&mut self) -> Result<(), Shutdown> {
self.sender.send(OutstationMessage::Disable).await?;
Ok(())
}
pub(crate) async fn shutdown(&mut self) -> Result<(), Shutdown> {
self.sender.send(OutstationMessage::Shutdown).await?;
Ok(())
}
}