working version with spinning tracker reporting

This commit is contained in:
Hartmut Seichter 2022-12-13 20:35:22 +01:00
parent a0f80fef96
commit 13349c9920

View file

@ -5,18 +5,18 @@ extern crate vrpn;
use bytes::{Bytes, BytesMut}; use bytes::{Bytes, BytesMut};
use std::{ use std::{
io::{Read,self}, io::{self, Read},
net::{SocketAddr, TcpStream}, net::{SocketAddr, TcpStream},
}; };
use vrpn::{ use vrpn::{
codec::peek_u32, codec::peek_u32,
constants::MAGIC_DATA, constants::MAGIC_DATA,
cookie::check_ver_nonfile_compatible, cookie::check_ver_nonfile_compatible,
message::MessageSize, message::MessageSize,
sync_io::{read_cookie, write_cookie}, sync_io::{read_cookie, write_cookie},
CookieData, Message, Result, SequencedGenericMessage, Unbuffer, tracker::PoseReport,
unbuffer, CookieData, Message, Result, SequencedGenericMessage, Unbuffer,
}; };
#[derive(Component)] #[derive(Component)]
@ -73,24 +73,19 @@ impl Tracker {
} }
pub fn update(&mut self) -> vrpn::Result<()> { pub fn update(&mut self) -> vrpn::Result<()> {
let mut buf = BytesMut::new(); let mut buf = BytesMut::new();
// Read the message header and padding // Read the message header and padding
buf.resize(24, 0); buf.resize(24, 0);
self.stream.read_exact(buf.as_mut())?; self.stream.read_exact(buf.as_mut())?;
// Peek the size field, to compute the MessageSize. // Peek the size field, to compute the MessageSize.
// let buf = buf.freeze(); // let buf = buf.freeze();
let total_len = peek_u32(&buf.clone().freeze())?.unwrap(); let total_len = peek_u32(&buf.clone().freeze())?.unwrap();
// let total_len = peek_u32(&buf)?.unwrap(); // let total_len = peek_u32(&buf)?.unwrap();
let size = MessageSize::from_length_field(total_len); let size = MessageSize::from_length_field(total_len);
// Read the body of the message // Read the body of the message
let mut body_buf = BytesMut::new(); let mut body_buf = BytesMut::new();
@ -99,14 +94,20 @@ impl Tracker {
// Combine the body with the header // Combine the body with the header
buf.extend_from_slice(&body_buf[..]); buf.extend_from_slice(&body_buf[..]);
let mut buf = buf.freeze(); let mut buf = buf.clone().freeze();
// eprintln!("{:?}", Message::from(unbuffered));
// info!("{:?}", Message::from(unbuffered));
let pose = PoseReport::unbuffer_ref(&mut body_buf.clone().freeze())?;
info!("{:?}", pose);
// Unbuffer the message. // Unbuffer the message.
let unbuffered = SequencedGenericMessage::unbuffer_ref(&mut buf)?; // let unbuffered = SequencedGenericMessage::unbuffer_ref(&mut buf)?;
// eprintln!("{:?}", Message::from(unbuffered)); // let message = Message::from(unbuffered);
info!("{:?}", Message::from(unbuffered)); // info!("{:?}",message.header);
Ok(()) Ok(())
} }
} }
@ -115,10 +116,8 @@ pub fn setup_tracker(mut commands: Commands) {
commands.spawn(Tracker::from_info("127.0.0.1", 3883)); commands.spawn(Tracker::from_info("127.0.0.1", 3883));
} }
pub fn update_tracker(mut query:Query<&mut Tracker>) pub fn update_tracker(mut query: Query<&mut Tracker>) {
{
for mut tracker in query.iter_mut() { for mut tracker in query.iter_mut() {
tracker.update(); tracker.update();
// tracker.connection.poll_endpoints(); // tracker.connection.poll_endpoints();