diff --git a/src/main.rs b/src/main.rs index 7ee2d0806d45f994fe08835df494f8ae6b03f026..715ec1c7abe5f308a2061910280f7061a949b992 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,20 +33,48 @@ fn main() { let server = thread::spawn(|| { let listener = TcpListener::bind(LIDAR_ADDRESS).unwrap(); let mut stream; - let mut message = [0u8; 2]; match listener.accept() { Ok((socket, addr)) => { println!("server: new client: {:?}", addr); stream=socket; thread::sleep(time::Duration::new(1,0)); - loop { - match stream.read_exact(&mut message) { - Ok(_) => {println!("server got: {} {}", message[0], message[1]); - let written_size = stream.write(&[69 as u8, 96 as u8]); - println!("server wrote {:?} to stream.", written_size); + + let mut message: [u8; 2048] = [0; 2048]; + let mut message_len = 0; + let mut recording = false; + + + for r in stream.try_clone().expect("stream clone failed").bytes() { + match r { + Ok(b) => { + if b == 2 { + //println!("Server found start of message"); + message[message_len] = b; + recording = true; + message_len+=1; + } + else if b == 3 { + message[message_len] = b; + message_len+=1; // since length now is total bytes, not index + //println!("Server found end of message"); + println!("Server got: {:?}", String::from_utf8_lossy(&message[0..message_len])); + let written_size = stream.write(&[69 as u8, 96 as u8]); + println!("server wrote {:?} to stream.", written_size); + + // reset everything for next message. + recording = false; + message_len = 0; + //break; + } + else if recording { + message[message_len] = b; + message_len+=1; + } + }, - Err(e) => {println!("Some error in readToString in swerver: {}", e)}, - } + Err(_) => {}, + } } + }, Err(e) => println!("couldn't get client: {:?}", e), } @@ -131,7 +159,7 @@ fn main() { // request lidar data //thread::sleep(time::Duration::new(3,0)); - let _ = stream.write_all("\x02sRN LMDscandata\x03"); + let _ = stream.write_all(b"\x02sRN LMDscandata\x03"); let stream_write_response = stream.write(&[65 as u8, 66 as u8]); println!("mapper wrote {:?} to stream.", stream_write_response);