summaryrefslogtreecommitdiff
path: root/shared/src/packets.rs
diff options
context:
space:
mode:
Diffstat (limited to 'shared/src/packets.rs')
-rw-r--r--shared/src/packets.rs26
1 files changed, 15 insertions, 11 deletions
diff --git a/shared/src/packets.rs b/shared/src/packets.rs
index 79dd1ea..c480ba8 100644
--- a/shared/src/packets.rs
+++ b/shared/src/packets.rs
@@ -3,14 +3,14 @@ use glam::Vec3;
use std::io::{Read, Write};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
-pub struct Resource(pub u128);
+pub struct Resource(pub [u8; 32]);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Object(pub u128);
#[derive(Debug, Clone)]
pub enum Packet {
RequestResource(Resource),
- RespondResource(Resource, Vec<u8>),
+ RespondResource(Vec<u8>),
Add(Object, Resource),
Remove(Object),
Position(Object, Vec3, Vec3),
@@ -24,18 +24,17 @@ impl Packet {
match self {
Packet::RequestResource(resource) => {
w.write_all(&[0x01])?;
- w.write_all(&resource.0.to_be_bytes())?;
+ w.write_all(&resource.0)?;
}
- Packet::RespondResource(resource, vec) => {
+ Packet::RespondResource(data) => {
w.write_all(&[0x02])?;
- w.write_all(&resource.0.to_be_bytes())?;
- w.write_all(&(vec.len() as u16).to_be_bytes())?;
- w.write_all(&vec)?;
+ w.write_all(&(data.len() as u16).to_be_bytes())?;
+ w.write_all(&data)?;
}
Packet::Add(object, resource) => {
w.write_all(&[0x03])?;
w.write_all(&object.0.to_be_bytes())?;
- w.write_all(&resource.0.to_be_bytes())?;
+ w.write_all(&resource.0)?;
}
Packet::Remove(object) => {
w.write_all(&[0x04])?;
@@ -73,9 +72,9 @@ impl Packet {
let mut tag = [0u8; 1];
r.read_exact(&mut tag)?;
Ok(match tag[0] {
- 0x01 => Packet::RequestResource(Resource(read_u128(r)?)),
- 0x02 => Packet::RespondResource(Resource(read_u128(r)?), read_data(r)?),
- 0x03 => Packet::Add(Object(read_u128(r)?), Resource(read_u128(r)?)),
+ 0x01 => Packet::RequestResource(read_res(r)?),
+ 0x02 => Packet::RespondResource(read_data(r)?),
+ 0x03 => Packet::Add(Object(read_u128(r)?), read_res(r)?),
0x04 => Packet::Remove(Object(read_u128(r)?)),
0x05 => Packet::Position(
Object(read_u128(r)?),
@@ -95,6 +94,11 @@ fn read_u128(r: &mut impl Read) -> Result<u128> {
r.read_exact(&mut buf)?;
Ok(u128::from_be_bytes(buf))
}
+fn read_res(r: &mut impl Read) -> Result<Resource> {
+ let mut buf = [0; 32];
+ r.read_exact(&mut buf)?;
+ Ok(Resource(buf))
+}
fn read_data(r: &mut impl Read) -> Result<Vec<u8>> {
let mut size = [0; 2];
r.read_exact(&mut size)?;