diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-05 18:20:49 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-05 18:20:49 +0100 |
commit | f2fa92e701b8da8e9d2e091ade21784623710374 (patch) | |
tree | 87d4fe19042fdabad4771967f89ea9cb436bdb1c /shared/src/packets.rs | |
parent | 72c23eb57070ab859ffde4f989aa85f7f2eedcf8 (diff) | |
download | weareserver-f2fa92e701b8da8e9d2e091ade21784623710374.tar weareserver-f2fa92e701b8da8e9d2e091ade21784623710374.tar.bz2 weareserver-f2fa92e701b8da8e9d2e091ade21784623710374.tar.zst |
a
Diffstat (limited to 'shared/src/packets.rs')
-rw-r--r-- | shared/src/packets.rs | 26 |
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)?; |