diff options
-rw-r--r-- | server/src/main.rs | 14 | ||||
-rw-r--r-- | shared/src/packets.rs | 4 | ||||
-rw-r--r-- | shared/src/resources.rs | 4 | ||||
-rw-r--r-- | world/src/main.rs | 11 |
4 files changed, 26 insertions, 7 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index 03ebb82..fc8583b 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -68,13 +68,21 @@ impl State { prefab_index: PrefabIndex::default(), }) } + pub fn prime_client(&self, conn: u128, net: &ServerNetwork) -> Result<()> { + net.broadcast( + Packet::PrefabIndex(self.store.set(&self.prefab_index)?), + true, + ); + for p in self.tree.prime_client() { + net.send(conn, p, true); + } + Ok(()) + } pub fn handle_packet(&mut self, conn: u128, packet: Packet, net: &ServerNetwork) -> Result<()> { self.tree.packet(&packet); match packet { Packet::Connect(_) => { - for p in self.tree.prime_client() { - net.send(conn, p, true); - } + self.prime_client(conn, net)?; } Packet::Disconnect => {} Packet::RequestResource(resource) => { diff --git a/shared/src/packets.rs b/shared/src/packets.rs index 1d3155f..66b0b55 100644 --- a/shared/src/packets.rs +++ b/shared/src/packets.rs @@ -58,7 +58,7 @@ pub enum Packet { Parent(Object, Object), Sound(Object, Data), PrefabIndex(Resource<PrefabIndex>), - PrefabName(Resource, String), + PrefabName(Resource<Prefab>, String), } pub trait ReadWrite: Sized { @@ -162,6 +162,8 @@ impl ReadWrite for Packet { 0x06 => Packet::Pose(Object(read_u128(r)?), read_params(r)?), 0x07 => Packet::Parent(Object(read_u128(r)?), Object(read_u128(r)?)), 0x08 => Packet::Sound(Object(read_u128(r)?), Data::read(r)?), + 0x09 => Packet::PrefabIndex(Resource::read(r)?), + 0x0a => Packet::PrefabName(Resource::read(r)?, String::read(r)?), _ => { for _ in 0..packet_len.max(1) - 1 { r.read_exact(&mut [0])?; diff --git a/shared/src/resources.rs b/shared/src/resources.rs index d22e3ea..95f42e4 100644 --- a/shared/src/resources.rs +++ b/shared/src/resources.rs @@ -19,7 +19,7 @@ use anyhow::Result; use glam::{Affine3A, Vec3A}; use log::warn; use std::{ - collections::{BTreeMap, HashMap}, + collections::BTreeMap, io::{Read, Write}, }; @@ -67,7 +67,7 @@ pub struct MeshPart { } #[derive(Debug, Default, Clone)] -pub struct PrefabIndex(pub BTreeMap<String, Resource>); +pub struct PrefabIndex(pub BTreeMap<String, Resource<Prefab>>); #[derive(Debug, Default, Clone)] pub struct AttributeArray(pub Vec<f32>); diff --git a/world/src/main.rs b/world/src/main.rs index bbbe4f9..c0b6833 100644 --- a/world/src/main.rs +++ b/world/src/main.rs @@ -49,6 +49,8 @@ struct Args { spin: bool, #[arg(short, long)] clear: bool, + #[arg(short, long)] + name: Option<String>, } fn main() -> Result<()> { @@ -79,7 +81,9 @@ fn main() -> Result<()> { )); let ob = Object::new(); - Packet::Add(ob, store.set(&prefab)?).write(&mut sock)?; + let pres = store.set(&prefab)?; + Packet::Add(ob, pres.clone()).write(&mut sock)?; + sock.flush()?; if args.spin { let mut sock2 = sock.try_clone().unwrap(); @@ -96,6 +100,11 @@ fn main() -> Result<()> { }); } + if let Some(name) = args.name { + Packet::PrefabName(pres, name).write(&mut sock)?; + sock.flush()?; + } + if args.push { store.iter(|d| { Packet::RespondResource(Data(d.to_vec())) |