X-Git-Url: http://git.scottworley.com/tattlekey/blobdiff_plain/d9c1d028d1f70711493df2e394ea044fd79af46a..e8a97c557b79be528de66f9c8e39f21f7d41527d:/server/src/main.rs?ds=sidebyside diff --git a/server/src/main.rs b/server/src/main.rs index 96f35b2..9406811 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -22,29 +22,38 @@ use std::time::{Duration, SystemTime, UNIX_EPOCH}; const MESSAGE_SIZE: usize = 12; const LOGFILENAME: &str = "log.csv"; -#[derive(Eq, Debug, Hash, PartialEq, Serialize)] +#[derive(Eq, Debug, Hash, PartialEq)] struct MessageKey { epoch: u32, device: u16, seq: u16, } -#[derive(Debug)] +#[derive(Debug, Serialize)] struct Message { - key: MessageKey, + epoch: u32, + device: u16, + seq: u16, t: u64, } +impl Message { + fn key(&self) -> MessageKey { + MessageKey { + epoch: self.epoch, + device: self.device, + seq: self.seq, + } + } +} impl From<&[u8; MESSAGE_SIZE]> for Message { fn from(value: &[u8; MESSAGE_SIZE]) -> Self { let ago = u32::from_be_bytes(value[8..=11].try_into().expect("I can't count")); let press_time = SystemTime::now() - Duration::new(ago.into(), 0); Self { - key: MessageKey { - epoch: u32::from_be_bytes(value[0..=3].try_into().expect("I can't count")), - device: u16::from_be_bytes(value[4..=5].try_into().expect("I can't count")), - seq: u16::from_be_bytes(value[6..=7].try_into().expect("I can't count")), - }, + epoch: u32::from_be_bytes(value[0..=3].try_into().expect("I can't count")), + device: u16::from_be_bytes(value[4..=5].try_into().expect("I can't count")), + seq: u16::from_be_bytes(value[6..=7].try_into().expect("I can't count")), t: press_time .duration_since(UNIX_EPOCH) .expect("Bad time?") @@ -85,12 +94,13 @@ impl Range { } fn merge_message(presses: &mut HashMap, message: Message) { - if let Some(r) = presses.get_mut(&message.key) { + let key = message.key(); + if let Some(r) = presses.get_mut(&key) { if !r.contains(&message.t) { r.extend(&message.t); } } else { - presses.insert(message.key, Range::new(&message.t)); + presses.insert(key, Range::new(&message.t)); } } @@ -121,8 +131,7 @@ fn main() { continue; } let message = Message::try_from(filled_buf).expect("I can't count"); - log.serialize((&message.key, message.t)) - .expect("Couldn't write log"); + log.serialize(&message).expect("Couldn't write log"); log.flush().expect("Couldn't flush log"); merge_message(&mut presses, message); }