fix(logic step): proper procedure

This commit is contained in:
Nova
2022-07-12 14:55:46 -04:00
parent 159afc007c
commit 44ba9f2d68
4 changed files with 75 additions and 34 deletions

View File

@@ -3,31 +3,40 @@ use crate::nodes::data;
use crate::nodes::field;
use crate::nodes::input;
use crate::nodes::item;
use crate::nodes::root;
use crate::nodes::root::Root;
use crate::nodes::spatial;
use lazy_static::lazy_static;
use libstardustxr::messenger::Messenger;
use mio::net::UnixStream;
use once_cell::sync::OnceCell;
use std::sync::Arc;
lazy_static! {
pub static ref INTERNAL_CLIENT: Arc<Client> = Default::default();
pub static ref INTERNAL_CLIENT: Arc<Client> = Client::new_local();
}
#[derive(Default)]
pub struct Client {
pub messenger: Option<Messenger>,
pub scenegraph: Scenegraph,
pub root: OnceCell<Arc<Root>>,
}
impl Client {
pub fn new_local() -> Arc<Self> {
Arc::new(Client {
messenger: None,
scenegraph: Default::default(),
root: OnceCell::new(),
})
}
pub fn from_connection(connection: UnixStream) -> Arc<Self> {
println!("New client connected");
let client = Arc::new(Client {
messenger: Some(Messenger::new(connection)),
scenegraph: Default::default(),
root: OnceCell::new(),
});
let _ = client.scenegraph.client.set(Arc::downgrade(&client));
root::create_root(&client);
let _ = client.root.set(Root::create(&client));
spatial::create_interface(&client);
field::create_interface(&client);
data::create_interface(&client);
@@ -43,3 +52,8 @@ impl Client {
}
}
}
impl Drop for Client {
fn drop(&mut self) {
println!("Client disconnected");
}
}