From d81eebe423fd3e00df5ff035ec24fe7fb37f2c62 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 7 Jan 2025 12:25:37 +0100 Subject: albedo texture works --- shared/src/packets.rs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'shared/src/packets.rs') diff --git a/shared/src/packets.rs b/shared/src/packets.rs index 0f1a886..07c4345 100644 --- a/shared/src/packets.rs +++ b/shared/src/packets.rs @@ -103,14 +103,13 @@ impl ReadWrite for Packet { fn write(&self, w: &mut dyn Write) -> Result<()> { let mut buf = Vec::new(); self.serialize_inner(&mut buf)?; - w.write_all(&(buf.len() as u16).to_be_bytes())?; + w.write_all(&(buf.len() as u32).to_be_bytes())?; w.write_all(&buf)?; Ok(()) } fn read(r: &mut dyn Read) -> Result { - let mut size_tag = [0u8; 3]; - r.read_exact(&mut size_tag)?; - Ok(match size_tag[2] { + let packet_len = u32::read(r)?; + Ok(match u8::read(r)? { 0x00 => Packet::Connect(read_u128(r)?), 0x01 => Packet::RequestResource(Resource::read(r)?), 0x02 => Packet::RespondResource(Data::read(r)?), @@ -125,8 +124,7 @@ impl ReadWrite for Packet { 0x07 => Packet::Parent(Object(read_u128(r)?), Object(read_u128(r)?)), 0x08 => Packet::Sound(Object(read_u128(r)?), Data::read(r)?), _ => { - let len = u16::from_be_bytes([size_tag[0], size_tag[1]]); - for _ in 0..len.max(1) - 1 { + for _ in 0..packet_len.max(1) - 1 { r.read_exact(&mut [0])?; } bail!("unknown packet tag"); @@ -153,14 +151,14 @@ impl ReadWrite for Resource { } impl ReadWrite for Data { fn write(&self, w: &mut dyn Write) -> Result<()> { - w.write_all(&(self.0.len() as u16).to_be_bytes())?; + w.write_all(&(self.0.len() as u32).to_be_bytes())?; w.write_all(&self.0)?; Ok(()) } fn read(r: &mut dyn Read) -> Result { - let mut size = [0; 2]; + let mut size = [0; 4]; r.read_exact(&mut size)?; - let size = u16::from_be_bytes(size); + let size = u32::from_be_bytes(size); let mut buf = vec![0; size as usize]; r.read_exact(&mut buf)?; Ok(Data(buf)) @@ -188,6 +186,17 @@ impl ReadWrite for f32 { Ok(f32::from_be_bytes(buf)) } } +impl ReadWrite for u32 { + fn write(&self, w: &mut dyn Write) -> Result<()> { + w.write_all(&self.to_be_bytes())?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result { + let mut buf = [0; 4]; + r.read_exact(&mut buf)?; + Ok(u32::from_be_bytes(buf)) + } +} impl Display for Resource { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { -- cgit v1.2.3-70-g09d2