diff options
-rw-r--r-- | server/src/main.rs | 6 | ||||
-rw-r--r-- | shared/src/packets.rs | 7 | ||||
-rw-r--r-- | shared/src/store.rs | 4 | ||||
-rw-r--r-- | world/src/main.rs | 8 |
4 files changed, 13 insertions, 12 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index 3a87574..09e6186 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -94,15 +94,15 @@ impl State { Packet::RequestResource(resource) => { if let Some(r) = self.store.get_raw(resource)? { debug!("resource is cached"); - net.send(conn, Packet::RespondResource(Data(r)), true); + net.send(conn, Packet::RespondResource(resource, Data(r)), true); } else { debug!("resource not cached, request is broadcast"); net.broadcast(Packet::RequestResource(resource), true); } } - Packet::RespondResource(data) => { + Packet::RespondResource(_, data) => { let resource = self.store.set_raw(&data.0)?; - net.broadcast(Packet::RespondResource(data), true); + net.broadcast(Packet::RespondResource(resource, data), true); if self .prefab_index_pending diff --git a/shared/src/packets.rs b/shared/src/packets.rs index 093247d..de69ffd 100644 --- a/shared/src/packets.rs +++ b/shared/src/packets.rs @@ -53,7 +53,7 @@ pub enum Packet { Connect(u128), Disconnect, RequestResource(Resource), - RespondResource(Data), + RespondResource(Resource, Data), Add(Object, Resource<Prefab>), Remove(Object), Position(Object, Vec3A, Vec3A), @@ -83,8 +83,9 @@ impl Packet { w.write_all(&[0x01])?; w.write_all(&resource.0)?; } - Packet::RespondResource(data) => { + Packet::RespondResource(resource, data) => { w.write_all(&[0x02])?; + resource.write(w)?; data.write(w)?; } Packet::Add(object, resource) => { @@ -142,7 +143,7 @@ impl ReadWrite for Packet { Ok(match u8::read(r)? { 0x00 => Packet::Connect(read_u128(r)?), 0x01 => Packet::RequestResource(Resource::read(r)?), - 0x02 => Packet::RespondResource(Data::read(r)?), + 0x02 => Packet::RespondResource(Resource::read(r)?, Data::read(r)?), 0x03 => Packet::Add(Object::read(r)?, Resource::read(r)?), 0x04 => Packet::Remove(Object::read(r)?), 0x05 => Packet::Position( diff --git a/shared/src/store.rs b/shared/src/store.rs index 86ae053..548a402 100644 --- a/shared/src/store.rs +++ b/shared/src/store.rs @@ -119,12 +119,12 @@ impl ResourceStore { } Ok(key) } - pub fn iter(&self, mut cb: impl FnMut(&[u8])) -> Result<()> { + pub fn iter(&self, mut cb: impl FnMut(Resource, &[u8])) -> Result<()> { match self { ResourceStore::Redb(_database) => todo!(), ResourceStore::Filesystem(_root) => todo!(), ResourceStore::Memory(mutex) => { - mutex.lock().unwrap().values().for_each(|v| cb(v)); + mutex.lock().unwrap().iter().for_each(|(k, v)| cb(*k, v)); Ok(()) } } diff --git a/world/src/main.rs b/world/src/main.rs index d56433a..4845db3 100644 --- a/world/src/main.rs +++ b/world/src/main.rs @@ -160,7 +160,7 @@ fn main() -> Result<()> { } let mut size = 0; - store.iter(|d| size += d.len()).unwrap(); + store.iter(|_k, d| size += d.len()).unwrap(); info!( "prefab has network size of {}", humansize::format_size(size, BINARY) @@ -205,8 +205,8 @@ fn main() -> Result<()> { } if args.push { - store.iter(|d| { - Packet::RespondResource(Data(d.to_vec())) + store.iter(|k, v| { + Packet::RespondResource(k, Data(v.to_vec())) .write(&mut sock) .unwrap(); })?; @@ -217,7 +217,7 @@ fn main() -> Result<()> { match packet { Packet::RequestResource(hash) => { if let Some(d) = store.get_raw(hash)? { - Packet::RespondResource(Data(d)).write(&mut sock)?; + Packet::RespondResource(hash, Data(d)).write(&mut sock)?; sock.flush()?; } } |