From 10cc6a9233150c33120f4b327ce2894dd7a30ca8 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Tue, 21 Mar 2023 15:56:15 -0600 Subject: [PATCH] cant compile --- src/engine.rs | 28 +++++++++++++++++++++++----- src/main.rs | 2 +- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index f5486f6..179ebed 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -36,13 +36,12 @@ pub fn build_input_engine_device_gilrs(cfg: &Engine) -> Result Result, port: i32, } pub fn build_input_engine_udp(cfg: &Engine) -> Result, String> { let udp_cfg = cfg.udp.as_ref().unwrap(); return Ok(Box::new(InputEngineUDP{ + last_socket: None, port: udp_cfg.port, })); } @@ -115,11 +117,27 @@ impl InputEngine for InputEngineUDP { fn get(&mut self) -> Vec { let addr = "0.0.0.0:".to_string() + &self.port.to_string(); println!("$ echo -n 'hello world' | nc -4u -w0 localhost {}", &self.port.to_string()); - let socket = std::net::UdpSocket::bind(addr).unwrap(); + if self.last_socket.is_none() { + self.last_socket = Some(std::net::UdpSocket::bind(addr).unwrap()); + } + + let result = self._get(); + + if result.is_err() { + self.last_socket = None; + return Vec::::new(); + } + return result.unwrap(); + } +} + +impl InputEngineUDP { + fn _get(&mut self) -> Result, std::io::Error> { let mut buf = [0; 128]; - let (amt, src) = socket.recv_from(&mut buf).unwrap(); + let socket = self.last_socket.ok_or(std::io::Error::new(std::io::ErrorKind::Other, "no socket"))?; + let (amt, _) = socket.recv_from(&mut buf)?; let buf = &mut buf[..amt]; - return std::str::from_utf8(buf).unwrap().chars().collect(); + return Ok(std::str::from_utf8(buf).unwrap().chars().collect()); } } diff --git a/src/main.rs b/src/main.rs index ef4fe41..72f48ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,7 @@ fn main() { println!("{:?} => {}", cfg.streams.input.engine.name, input_engine.is_ok()); println!("{:?} => {}", cfg.streams.output.engine.name, output_engine.is_ok()); let mut input_engine = input_engine.unwrap(); - let mut output_engine = output_engine.unwrap(); + let output_engine = output_engine.unwrap(); loop { output_engine.put(input_engine.get()); }