Mercurial > templog
diff rust/src/fridge.rs @ 593:bf138339d20a rust
fiddling with timeouts and closures
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 27 Dec 2016 00:51:28 +0800 |
parents | 03b48ec0bb03 |
children | aff50ee77252 |
line wrap: on
line diff
--- a/rust/src/fridge.rs Sat Dec 24 00:14:58 2016 +0800 +++ b/rust/src/fridge.rs Tue Dec 27 00:51:28 2016 +0800 @@ -1,16 +1,65 @@ +use std::io; +use std::time::Duration; + +use futures::Future; +use tokio_core::reactor::Timeout; +use tokio_core::reactor::Handle; + use types::*; -pub struct Fridge<'a> { - params: &'a Params, +pub struct Fridge { + params: Params, + temp_wort: Option<f32>, + temp_fridge: Option<f32>, + + // timeouts to wake ourself up again + //overshoot_timeout: Option<Future<Item=(), Error=io::Error>>, + //fridgeoff_timeout: Option<Future<Item=(), Error=io::Error>>, + wortvalid_timeout: Option<Timeout>, } -impl<'a> Fridge<'a> { - pub fn new(p: &'a Params) -> Fridge<'a> { - Fridge { params: p } +impl Fridge { + pub fn new(p: Params) -> Fridge { + Fridge { + params: p, + temp_wort: None, + temp_fridge: None, + //overshoot_timeout: None, + //fridgeoff_timeout: None, + wortvalid_timeout: None, + } + } + + fn tick(&mut self, handle: &Handle) { + } - pub fn set_params(&mut self, p: &'a Params) { + pub fn set_params(&mut self, handle: &Handle, p: Params) { self.params = p; + println!("params {:?}", self.params); + + self.tick(handle); + } + + pub fn set_temps(&mut self, handle: &Handle, + wort: Option<f32>, fridge: Option<f32>) { + self.temp_wort = wort; + self.temp_fridge = fridge; + + if let Some(_) = self.temp_wort { + // set a new timeout, replacing any existing + let dur = Duration::new(10, 0); // XXX + let t = Timeout::new(dur, handle).unwrap(); + /* + handle.spawn(t.and_then(|_| { + self.tick(handle); + Ok(()) + }).map_err(|x| ())); + */ + self.wortvalid_timeout = Some(t); + } + + self.tick(handle); } }