summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/src/main.rs14
-rw-r--r--shared/src/packets.rs4
-rw-r--r--shared/src/resources.rs4
-rw-r--r--world/src/main.rs11
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()))