PixSpace/src/tracker.rs

105 lines
3.2 KiB
Rust
Raw Normal View History

2022-12-11 23:41:22 +01:00
use bevy::prelude::*;
extern crate bytes;
2022-12-12 23:18:34 +01:00
extern crate vrpn;
2023-01-31 10:52:09 +01:00
extern crate crossbeam;
2022-12-12 23:18:34 +01:00
// use futures_lite::future;
use rand::Rng;
use std::time::{Duration, Instant};
2022-12-12 23:18:34 +01:00
use bytes::{Bytes, BytesMut};
use std::{
io::{self, Read},
2022-12-12 23:18:34 +01:00
net::{SocketAddr, TcpStream},
};
2022-12-11 23:41:22 +01:00
use std::sync::mpsc::{channel, Receiver};
2022-12-14 22:55:26 +01:00
2022-12-11 23:41:22 +01:00
use vrpn::{
2022-12-12 23:18:34 +01:00
codec::peek_u32,
constants::MAGIC_DATA,
cookie::check_ver_nonfile_compatible,
handler::{HandlerCode, TypedHandler},
2022-12-12 23:18:34 +01:00
message::MessageSize,
sync_io::{read_cookie, write_cookie, EndpointSyncTcp},
tracker::PoseReport,
unbuffer, CookieData, Message, Result, SequencedGenericMessage, TypeDispatcher,
TypedBodylessHandler, Unbuffer,
2022-12-11 23:41:22 +01:00
};
2023-01-31 10:52:09 +01:00
#[derive(Resource, Debug)]
pub struct Tracker;
2022-12-11 23:41:22 +01:00
impl FromWorld for Tracker {
fn from_world(world: &mut World) -> Self {
2022-12-22 13:11:52 +01:00
info!("Test here!");
2022-12-14 22:55:26 +01:00
std::thread::spawn(move || {
2022-12-22 13:11:52 +01:00
// 212.201.64.122 | 127.0.0.1
2023-01-31 10:52:09 +01:00
let addr: SocketAddr = "212.201.64.122:3883".parse().unwrap();
2022-12-14 22:55:26 +01:00
let mut stream = TcpStream::connect(addr).unwrap();
stream.set_nodelay(true).unwrap();
2022-12-22 13:11:52 +01:00
2022-12-14 22:55:26 +01:00
// We first write our cookie, then read and check the server's cookie, before the loop.
write_cookie(&mut stream, CookieData::from(MAGIC_DATA)).unwrap();
let cookie_buf = read_cookie(&mut stream).unwrap();
let mut cookie_buf = Bytes::from(&cookie_buf[..]);
2022-12-22 13:11:52 +01:00
CookieData::unbuffer_ref(&mut cookie_buf)
.and_then(|msg| check_ver_nonfile_compatible(msg.version))
.unwrap();
2022-12-22 13:11:52 +01:00
// Not actually doing anything with the messages here, just receiving them and printing them.
loop {
let mut buf = BytesMut::new();
// Read the message header and padding
buf.resize(24, 0);
stream.read_exact(buf.as_mut()).unwrap();
2022-12-12 23:18:34 +01:00
// Peek the size field, to compute the MessageSize.
let total_len = peek_u32(&buf.clone().freeze()).unwrap().unwrap();
let size = MessageSize::from_length_field(total_len);
2022-12-12 03:12:56 +01:00
// Read the body of the message
let mut body_buf = BytesMut::new();
body_buf.resize(size.padded_body_size(), 0);
stream.read_exact(body_buf.as_mut()).unwrap();
// Combine the body with the header
buf.extend_from_slice(&body_buf[..]);
let mut buf = buf.freeze();
// Unbuffer the message.
let unbuffered = SequencedGenericMessage::unbuffer_ref(&mut buf).unwrap();
let message = Message::from(unbuffered);
2022-12-12 23:18:34 +01:00
// let result: Message<PoseReport> = Message::try_from_generic(&message)?;
2022-12-12 23:18:34 +01:00
let result = Message::<PoseReport>::try_from_generic(&message);
match result {
Ok(result) => {
eprintln!("Pose from tracker {:?}",result.body);
// sender_th.send(result.body).unwrap();
},
2023-01-09 16:07:07 +01:00
Err(_) => { /* silently fail */ }
}
}
});
2022-12-12 03:12:56 +01:00
2023-01-31 10:52:09 +01:00
Self { }
}
}