summaryrefslogtreecommitdiff
path: root/network/src/packets.rs
diff options
context:
space:
mode:
Diffstat (limited to 'network/src/packets.rs')
-rw-r--r--network/src/packets.rs113
1 files changed, 0 insertions, 113 deletions
diff --git a/network/src/packets.rs b/network/src/packets.rs
deleted file mode 100644
index 03c7270..0000000
--- a/network/src/packets.rs
+++ /dev/null
@@ -1,113 +0,0 @@
-use anyhow::{Result, bail};
-use glam::Vec3;
-use std::io::{Read, Write};
-
-pub struct Resource(pub u128);
-pub struct Object(pub u128);
-
-pub enum Packet {
- RequestResource(Resource),
- RespondResource(Resource, Vec<u8>),
- Add(Object, Resource),
- Remove(Object),
- Position(Object, Vec3),
- Pose(Object, Vec<f32>),
- Parent(Object, Object),
- Sound(Object, Vec<u8>),
-}
-
-impl Packet {
- pub fn serialize(&self, w: &mut impl Write) -> Result<()> {
- match self {
- Packet::RequestResource(resource) => {
- w.write_all(&[0x01])?;
- w.write_all(&resource.0.to_be_bytes())?;
- }
- Packet::RespondResource(resource, vec) => {
- 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)?;
- }
- Packet::Add(object, resource) => {
- w.write_all(&[0x03])?;
- w.write_all(&object.0.to_be_bytes())?;
- w.write_all(&resource.0.to_be_bytes())?;
- }
- Packet::Remove(object) => {
- w.write_all(&[0x04])?;
- w.write_all(&object.0.to_be_bytes())?;
- }
- Packet::Position(object, vec3) => {
- w.write_all(&[0x05])?;
- w.write_all(&object.0.to_be_bytes())?;
- w.write_all(&vec3.x.to_be_bytes())?;
- w.write_all(&vec3.y.to_be_bytes())?;
- w.write_all(&vec3.z.to_be_bytes())?;
- }
- Packet::Pose(object, vec) => {
- w.write_all(&[0x06])?;
- w.write_all(&object.0.to_be_bytes())?;
- w.write_all(&(vec.len() as u16).to_be_bytes())?;
- }
- Packet::Parent(parent, child) => {
- w.write_all(&[0x07])?;
- w.write_all(&parent.0.to_be_bytes())?;
- w.write_all(&child.0.to_be_bytes())?;
- }
- Packet::Sound(object, vec) => {
- w.write_all(&[0x08])?;
- w.write_all(&object.0.to_be_bytes())?;
- w.write_all(&(vec.len() as u16).to_be_bytes())?;
- }
- }
- Ok(())
- }
- pub fn deserialize(r: &mut impl Read) -> Result<Self> {
- 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)?)),
- 0x04 => Packet::Remove(Object(read_u128(r)?)),
- 0x05 => Packet::Position(
- Object(read_u128(r)?),
- Vec3::new(read_float(r)?, read_float(r)?, read_float(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)?), read_data(r)?),
- _ => bail!("unknown packet tag"),
- })
- }
-}
-
-fn read_u128(r: &mut impl Read) -> Result<u128> {
- let mut buf = [0; 16];
- r.read_exact(&mut buf)?;
- Ok(u128::from_be_bytes(buf))
-}
-fn read_data(r: &mut impl Read) -> Result<Vec<u8>> {
- let mut size = [0; 2];
- r.read_exact(&mut size)?;
- let size = u16::from_be_bytes(size);
- let mut buf = vec![0; size as usize];
- r.read_exact(&mut buf)?;
- Ok(buf)
-}
-fn read_float(r: &mut impl Read) -> Result<f32> {
- let mut buf = [0; 4];
- r.read_exact(&mut buf)?;
- Ok(f32::from_be_bytes(buf))
-}
-fn read_params(r: &mut impl Read) -> Result<Vec<f32>> {
- let mut size = [0; 2];
- r.read_exact(&mut size)?;
- let size = u16::from_be_bytes(size);
- let mut v = Vec::with_capacity(size as usize);
- for _ in 0..size {
- v.push(read_float(r)?);
- }
- Ok(v)
-}