From 838a49ee68b55b55cc94395568617dc9644b7a1d Mon Sep 17 00:00:00 2001 From: Pavel Perestoronin Date: Mon, 8 May 2023 23:14:13 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=A5=20Rename=20`Packet::clock`=20to=20?= =?UTF-8?q?`clock=5Fsecs`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/data/entity_method.rs | 16 ++++++++-------- src/models/data/packet.rs | 23 ++++++++++++++++------- src/models/data/payload.rs | 18 +++++++++--------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/models/data/entity_method.rs b/src/models/data/entity_method.rs index 2dcfaee..70e2746 100644 --- a/src/models/data/entity_method.rs +++ b/src/models/data/entity_method.rs @@ -27,21 +27,21 @@ pub enum EntityMethod { impl EntityMethod { /// Parse the entity method payload. - pub fn new(payload: &[u8]) -> Result { - let mut payload = payload; + pub fn new(raw_payload: &[u8]) -> Result { + let mut raw_payload = raw_payload; - payload.read_u32::()?; - let sub_type = payload.read_u32::()?; + raw_payload.read_u32::()?; + let sub_type = raw_payload.read_u32::()?; let this = match sub_type { 47 => { - let _inner_length = payload.read_u32::()?; + let _inner_length = raw_payload.read_u32::()?; - let field_number = decode_varint(&mut payload)?; - let message_length = read_quirky_length(&mut payload)?; + let field_number = decode_varint(&mut raw_payload)?; + let message_length = read_quirky_length(&mut raw_payload)?; Self::UpdateArena { field_number, - arguments: UpdateArena::decode(&payload[..message_length])?, + arguments: UpdateArena::decode(&raw_payload[..message_length])?, } } diff --git a/src/models/data/packet.rs b/src/models/data/packet.rs index 0ad0302..c7e7cb8 100644 --- a/src/models/data/packet.rs +++ b/src/models/data/packet.rs @@ -7,12 +7,21 @@ use serde_with::serde_as; use crate::models::data::payload::Payload; use crate::result::Result; +/// «Packet» is a single traffic message in a replay, +/// packets tell us what is going on during the battle. #[serde_as] #[derive(Debug, Serialize)] pub struct Packet { - pub clock: f32, + /// Replay time, starting from zero. + #[serde(rename = "clock")] + pub clock_secs: f32, + + /// Parsed packet payload. pub payload: Payload, + /// Raw packet payload, excluding the clock and packet type, and including optional subtype. + /// + /// This attribute requires the `raw-payload` feature. #[cfg(feature = "raw-payload")] #[serde_as(as = "serde_with::hex::Hex")] pub raw_payload: Vec, @@ -22,19 +31,19 @@ impl Packet { pub fn from_reader(reader: &mut impl Read) -> Result> { let Ok(length) = reader.read_u32::() else { return Ok(None) }; let type_ = reader.read_u32::()?; - let clock = reader.read_f32::()?; - let payload = Self::read_payload(reader, length as usize)?; + let clock_secs = reader.read_f32::()?; + let raw_payload = Self::read_raw_payload(reader, length as usize)?; let this = Self { - clock, - payload: Payload::new(type_, &payload)?, + clock_secs, + payload: Payload::new(type_, &raw_payload)?, #[cfg(feature = "raw-payload")] - raw_payload: payload, + raw_payload, }; Ok(Some(this)) } - fn read_payload(reader: &mut impl Read, length: usize) -> Result> { + fn read_raw_payload(reader: &mut impl Read, length: usize) -> Result> { let mut buffer = Vec::new(); buffer.resize(length, 0); reader.read_exact(&mut buffer)?; diff --git a/src/models/data/payload.rs b/src/models/data/payload.rs index 4078f3e..99a3376 100644 --- a/src/models/data/payload.rs +++ b/src/models/data/payload.rs @@ -30,19 +30,19 @@ pub enum Payload { impl Payload { /// Parse the packet payload. - pub fn new(packet_type: u32, payload: &[u8]) -> Result { - let mut payload = payload; + pub fn new(packet_type: u32, raw_payload: &[u8]) -> Result { + let mut raw_payload = raw_payload; let this = match packet_type { 0 => { - payload.read_exact(&mut [0; 10])?; + raw_payload.read_exact(&mut [0; 10])?; - let author_nickname = read_string(&mut payload)?; - let arena_unique_id = payload.read_u64::()?; - let arena_type_id = payload.read_u32::()?; + let author_nickname = read_string(&mut raw_payload)?; + let arena_unique_id = raw_payload.read_u64::()?; + let arena_type_id = raw_payload.read_u32::()?; let arguments = { - let pickled_length = read_quirky_length(&mut payload)?; - read_pickled(&mut payload, pickled_length)? + let pickled_length = read_quirky_length(&mut raw_payload)?; + read_pickled(&mut raw_payload, pickled_length)? }; Self::BasePlayerCreate { arguments, @@ -52,7 +52,7 @@ impl Payload { } } - 8 => Self::EntityMethod(EntityMethod::new(payload)?), + 8 => Self::EntityMethod(EntityMethod::new(raw_payload)?), _ => Self::Unknown { packet_type }, };