2022-12-11 23:41:22 +01:00
|
|
|
use bevy::prelude::*;
|
|
|
|
|
|
|
|
extern crate vrpn;
|
2022-12-12 00:07:42 +01:00
|
|
|
extern crate bytes;
|
2022-12-11 23:41:22 +01:00
|
|
|
|
2022-12-12 00:07:42 +01:00
|
|
|
// extern crate tokio;
|
2022-12-11 23:41:22 +01:00
|
|
|
|
2022-12-12 00:07:42 +01:00
|
|
|
use bytes::Bytes;
|
|
|
|
use std::net::{SocketAddr, TcpStream};
|
2022-12-11 23:41:22 +01:00
|
|
|
use vrpn::{
|
2022-12-12 00:07:42 +01:00
|
|
|
constants::MAGIC_DATA,
|
|
|
|
cookie::check_ver_nonfile_compatible,
|
2022-12-11 23:41:22 +01:00
|
|
|
handler::{HandlerCode, TypedHandler},
|
2022-12-12 00:07:42 +01:00
|
|
|
sync_io::{read_cookie, write_cookie, EndpointSyncTcp},
|
2022-12-11 23:41:22 +01:00
|
|
|
tracker::PoseReport,
|
2022-12-12 00:07:42 +01:00
|
|
|
CookieData, Message, Result, TypeDispatcher, Unbuffer,
|
2022-12-11 23:41:22 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#[derive(Component)]
|
|
|
|
pub struct Tracker {
|
2022-12-12 03:12:56 +01:00
|
|
|
endpoint: EndpointSyncTcp,
|
|
|
|
dispatcher: TypeDispatcher
|
2022-12-12 00:07:42 +01:00
|
|
|
// stream: ConnectionIpStream,
|
|
|
|
// connection: Arc<ConnectionIp>
|
2022-12-11 23:41:22 +01:00
|
|
|
}
|
|
|
|
|
2022-12-12 00:07:42 +01:00
|
|
|
#[derive(Debug)]
|
|
|
|
struct TrackerHandler {}
|
2022-12-11 23:41:22 +01:00
|
|
|
|
2022-12-12 00:07:42 +01:00
|
|
|
impl TypedHandler for TrackerHandler {
|
|
|
|
type Item = PoseReport;
|
2022-12-11 23:41:22 +01:00
|
|
|
fn handle_typed(&mut self, msg: &Message<PoseReport>) -> Result<HandlerCode> {
|
|
|
|
info!("{:?}\n {:?}", msg.header, msg.body);
|
|
|
|
Ok(HandlerCode::ContinueProcessing)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-12 00:07:42 +01:00
|
|
|
impl Tracker {
|
2022-12-12 03:12:56 +01:00
|
|
|
pub fn from_info(server_ip: &str, port: u16) -> Self {
|
2022-12-12 00:07:42 +01:00
|
|
|
// let server = format!("tcp://{}:{}", server_ip, port)
|
|
|
|
// .parse::<ServerInfo>()
|
|
|
|
// .unwrap();
|
|
|
|
|
|
|
|
// let connection = ConnectionIp::new_client(server, None, None).expect("msg");
|
|
|
|
|
|
|
|
// let sender = connection
|
|
|
|
// .register_sender(StaticSenderName(b"Tracker0"))
|
|
|
|
// .expect("should be able to register sender");
|
|
|
|
|
|
|
|
// let ping_client = ping::Client::new(sender, Arc::clone(&connection))
|
|
|
|
// .expect("should be able to create ping client");
|
|
|
|
|
|
|
|
|
|
|
|
let addr: SocketAddr = "127.0.0.1:3883".parse().unwrap();
|
2022-12-12 03:12:56 +01:00
|
|
|
let mut stream = TcpStream::connect(addr).unwrap();
|
|
|
|
stream.set_nodelay(true).unwrap();
|
2022-12-12 00:07:42 +01:00
|
|
|
|
|
|
|
// We first write our cookie, then read and check the server's cookie, before the loop.
|
2022-12-12 03:12:56 +01:00
|
|
|
write_cookie(&mut stream, CookieData::from(MAGIC_DATA)).unwrap();
|
|
|
|
let cookie_buf = read_cookie(&mut stream).unwrap();
|
2022-12-12 00:07:42 +01:00
|
|
|
let mut cookie_buf = Bytes::from(&cookie_buf[..]);
|
|
|
|
|
|
|
|
// CookieData::unbuffer_ref(&mut cookie_buf)
|
|
|
|
// .and_then(|msg| check_ver_nonfile_compatible(msg.version))?;
|
|
|
|
|
|
|
|
let mut endpoint = EndpointSyncTcp::new(stream);
|
|
|
|
let mut dispatcher = TypeDispatcher::new();
|
2022-12-12 03:12:56 +01:00
|
|
|
let _ = dispatcher.add_typed_handler(Box::new(TrackerHandler {}), None).unwrap();
|
|
|
|
|
|
|
|
Tracker {
|
|
|
|
endpoint,
|
|
|
|
dispatcher
|
|
|
|
}
|
2022-12-12 00:07:42 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-12-12 03:12:56 +01:00
|
|
|
fn update(&self) {
|
|
|
|
self.endpoint.poll_endpoint(&mut self.dispatcher).unwrap();
|
|
|
|
}
|
2022-12-12 00:07:42 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-12-11 23:41:22 +01:00
|
|
|
pub fn setup_tracker(mut commands: Commands)
|
|
|
|
{
|
|
|
|
commands.spawn(Tracker::from_info("127.0.0.1",3883));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn update_tracker(mut query:Query<&mut Tracker>)
|
|
|
|
{
|
|
|
|
for mut tracker in query.iter_mut() {
|
|
|
|
|
2022-12-12 03:12:56 +01:00
|
|
|
// tracker.update();
|
|
|
|
|
2022-12-11 23:41:22 +01:00
|
|
|
// tracker.connection.poll_endpoints();
|
|
|
|
// tracker
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|