summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/src/main.rs6
-rw-r--r--shared/src/packets.rs7
-rw-r--r--shared/src/store.rs4
-rw-r--r--world/src/main.rs8
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()?;
}
}