diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-26 19:32:46 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-26 19:32:46 +0100 |
commit | f195ae4a1059270f14163b62e7860c3630ee5895 (patch) | |
tree | dc1a1f0f0ed08340423ea3f921173633561a923f /shared/src/helper.rs | |
parent | 55ef91b95decf829ac988fd9e86624b488959956 (diff) | |
download | weareserver-f195ae4a1059270f14163b62e7860c3630ee5895.tar weareserver-f195ae4a1059270f14163b62e7860c3630ee5895.tar.bz2 weareserver-f195ae4a1059270f14163b62e7860c3630ee5895.tar.zst |
reparenting checks and conn owned objects
Diffstat (limited to 'shared/src/helper.rs')
-rw-r--r-- | shared/src/helper.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/shared/src/helper.rs b/shared/src/helper.rs index 14fb2bd..3ae7c37 100644 --- a/shared/src/helper.rs +++ b/shared/src/helper.rs @@ -14,7 +14,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ -use crate::packets::{Data, Object, Resource}; +use crate::packets::{Data, Message, Object, Resource}; use anyhow::Result; use glam::{Affine3A, Vec2, Vec3, Vec3A}; use std::{ @@ -304,6 +304,21 @@ impl ReadWrite for Data { Ok(Self(buf)) } } +impl ReadWrite for Message { + fn write(&self, w: &mut dyn Write) -> Result<()> { + w.write_all(&(self.0.len() as u32).to_be_bytes())?; + w.write_all(&self.0.as_bytes())?; + Ok(()) + } + fn read(r: &mut dyn Read) -> Result<Self> { + let mut size = [0; { size_of::<u32>() }]; + 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(Self(String::from_utf8_lossy_owned(buf))) + } +} impl<T> ReadWrite for Resource<T> { fn write(&self, w: &mut dyn Write) -> Result<()> { w.write_all(&self.0)?; |