From 7e06efee8b33fb8619aa5e50afc8728fd330f39d Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 8 Jan 2025 00:01:07 +0100 Subject: fix image ser bug --- shared/src/packets.rs | 124 ++++---------------------------------------------- 1 file changed, 10 insertions(+), 114 deletions(-) (limited to 'shared/src/packets.rs') diff --git a/shared/src/packets.rs b/shared/src/packets.rs index 66b0b55..a35b4e9 100644 --- a/shared/src/packets.rs +++ b/shared/src/packets.rs @@ -14,7 +14,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -use crate::resources::{Prefab, PrefabIndex}; +use crate::{ + helper::ReadWrite, + resources::{Prefab, PrefabIndex}, +}; use anyhow::{Result, bail}; use glam::Vec3A; use std::{ @@ -61,17 +64,6 @@ pub enum Packet { PrefabName(Resource, String), } -pub trait ReadWrite: Sized { - fn write(&self, w: &mut dyn Write) -> Result<()>; - fn read(r: &mut dyn Read) -> Result; - - fn write_alloc(&self) -> Vec { - let mut buf = Vec::new(); - self.write(&mut buf).unwrap(); - buf - } -} - impl Object { pub fn new() -> Self { Self(rand::random()) @@ -152,16 +144,16 @@ impl ReadWrite for Packet { 0x00 => Packet::Connect(read_u128(r)?), 0x01 => Packet::RequestResource(Resource::read(r)?), 0x02 => Packet::RespondResource(Data::read(r)?), - 0x03 => Packet::Add(Object(read_u128(r)?), Resource::read(r)?), - 0x04 => Packet::Remove(Object(read_u128(r)?)), + 0x03 => Packet::Add(Object::read(r)?, Resource::read(r)?), + 0x04 => Packet::Remove(Object::read(r)?), 0x05 => Packet::Position( - Object(read_u128(r)?), + Object::read(r)?, Vec3A::new(f32::read(r)?, f32::read(r)?, f32::read(r)?), Vec3A::new(f32::read(r)?, f32::read(r)?, f32::read(r)?), ), - 0x06 => Packet::Pose(Object(read_u128(r)?), read_params(r)?), - 0x07 => Packet::Parent(Object(read_u128(r)?), Object(read_u128(r)?)), - 0x08 => Packet::Sound(Object(read_u128(r)?), Data::read(r)?), + 0x06 => Packet::Pose(Object::read(r)?, read_params(r)?), + 0x07 => Packet::Parent(Object::read(r)?, Object::read(r)?), + 0x08 => Packet::Sound(Object::read(r)?, Data::read(r)?), 0x09 => Packet::PrefabIndex(Resource::read(r)?), 0x0a => Packet::PrefabName(Resource::read(r)?, String::read(r)?), _ => { @@ -179,68 +171,7 @@ fn read_u128(r: &mut dyn Read) -> Result { r.read_exact(&mut buf)?; Ok(u128::from_be_bytes(buf)) } -impl ReadWrite for Resource { - fn write(&self, w: &mut dyn Write) -> Result<()> { - w.write_all(&self.0)?; - Ok(()) - } - fn read(r: &mut dyn Read) -> Result { - let mut s = Self([0; 32], PhantomData); - r.read_exact(&mut s.0)?; - Ok(s) - } -} -impl ReadWrite for Object { - fn write(&self, w: &mut dyn Write) -> Result<()> { - w.write_all(&self.0.to_be_bytes())?; - Ok(()) - } - fn read(r: &mut dyn Read) -> Result { - let mut s = [0; 16]; - r.read_exact(&mut s)?; - Ok(Object(u128::from_be_bytes(s))) - } -} - -impl ReadWrite for Data { - fn write(&self, w: &mut dyn Write) -> Result<()> { - self.0.write(w) - } - fn read(r: &mut dyn Read) -> Result { - Ok(Self(Vec::read(r)?)) - } -} -impl ReadWrite for Vec { - fn write(&self, w: &mut dyn Write) -> Result<()> { - w.write_all(&(self.len() as u32).to_be_bytes())?; - w.write_all(&self)?; - Ok(()) - } - fn read(r: &mut dyn Read) -> Result { - let mut size = [0; 4]; - r.read_exact(&mut size)?; - let size = u32::from_be_bytes(size); - let mut buf = vec![0; size as usize]; - r.read_exact(&mut buf)?; - Ok(buf) - } -} -impl ReadWrite for String { - fn write(&self, w: &mut dyn Write) -> Result<()> { - w.write_all(&(self.len() as u32).to_be_bytes())?; - w.write_all(self.as_bytes())?; - Ok(()) - } - fn read(r: &mut dyn Read) -> Result { - let mut size = [0; 4]; - r.read_exact(&mut size)?; - let size = u32::from_be_bytes(size); - let mut buf = vec![0; size as usize]; - r.read_exact(&mut buf)?; - Ok(String::from_utf8(buf)?) - } -} fn read_params(r: &mut dyn Read) -> Result> { let mut size = [0; 2]; r.read_exact(&mut size)?; @@ -252,29 +183,6 @@ fn read_params(r: &mut dyn Read) -> Result> { Ok(v) } -impl ReadWrite for f32 { - 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(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 { write!( @@ -293,18 +201,6 @@ impl Debug for Resource { } } -impl ReadWrite for [T; N] { - fn write(&self, w: &mut dyn Write) -> Result<()> { - for e in self { - e.write(w)?; - } - Ok(()) - } - - fn read(r: &mut dyn Read) -> Result { - [(); N].try_map(|()| T::read(r)) - } -} impl Debug for Data { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_tuple("Data").finish_non_exhaustive() -- cgit v1.2.3-70-g09d2