X-Git-Url: http://git.scottworley.com/tattlekey/blobdiff_plain/79d78cde52a33539a4739df85a234c0aa0c34735..c54403e6dc4829379e3d933f33da344c26fb7c1d:/server/src/main.rs diff --git a/server/src/main.rs b/server/src/main.rs index 071c4b2..bf4f4fc 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -20,6 +20,7 @@ use std::net::UdpSocket; use std::time::{Duration, SystemTime}; const MESSAGE_SIZE: usize = 12; +const LOGFILENAME: &str = "log.csv"; #[derive(Eq, Debug, Hash, PartialEq, Serialize)] struct MessageKey { @@ -79,10 +80,32 @@ impl Range { } } +fn merge_message(presses: &mut HashMap, message: Message) { + if let Some(r) = presses.get_mut(&message.key) { + if !r.contains(&message.t) { + r.extend(&message.t); + } + } else { + presses.insert(message.key, Range::new(&message.t)); + } +} + +fn open_log_for_writing() -> csv::Writer { + let log_file_exists = std::path::Path::new(LOGFILENAME).exists(); + let logfile = std::fs::OpenOptions::new() + .create_new(!log_file_exists) + .append(true) + .open(LOGFILENAME) + .expect("Coudln't open log file"); + csv::WriterBuilder::new() + .has_headers(!log_file_exists) + .from_writer(logfile) +} + fn main() { - let mut log = csv::Writer::from_writer(std::io::stdout()); - let mut presses = HashMap::::new(); let socket = UdpSocket::bind("0.0.0.0:29803").expect("couldn't bind to address"); + let mut presses = HashMap::::new(); + let mut log = open_log_for_writing(); loop { let mut buf = [0; MESSAGE_SIZE]; match socket.recv_from(&mut buf) { @@ -97,13 +120,7 @@ fn main() { log.serialize((&message.key, message.t)) .expect("Couldn't write log"); log.flush().expect("Couldn't flush log"); - if let Some(r) = presses.get_mut(&message.key) { - if !r.contains(&message.t) { - r.extend(&message.t); - } - } else { - presses.insert(message.key, Range::new(&message.t)); - } + merge_message(&mut presses, message); } } }