mirror of
https://github.com/eigenein/wotbreplay-parser.git
synced 2026-10-21 10:27:01 +02:00
Break: decode the players packet
This commit is contained in:
1 parent
e48fe1dd0d
commit
72165ae52c
5 files changed
+114
-16
No files matched your search
@@ -1,16 +1,23 @@
|
||||
use std::io::Read;
|
||||
|
||||
use byteorder::{LittleEndian, ReadBytesExt};
|
||||
use prost::encoding::decode_varint;
|
||||
use prost::Message;
|
||||
use serde::Serialize;
|
||||
use serde_with::serde_as;
|
||||
|
||||
use crate::models::data::read_quirky_length;
|
||||
use crate::models::data::subtype_2f::Subtype2F;
|
||||
use crate::result::Result;
|
||||
|
||||
#[serde_as]
|
||||
#[derive(Debug, Serialize)]
|
||||
pub enum EntityMethod {
|
||||
Subtype2F {
|
||||
// prefix: [u8; 9],
|
||||
field_number: u64,
|
||||
sub_type_2f: Subtype2F,
|
||||
|
||||
/// Original payload for investigation.
|
||||
#[serde_as(as = "serde_with::hex::Hex")]
|
||||
payload: Vec<u8>,
|
||||
},
|
||||
|
||||
/// Default variant when subtype is not known by the parser.
|
||||
@@ -32,9 +39,15 @@ impl EntityMethod {
|
||||
|
||||
let this = match sub_type {
|
||||
0x2F => {
|
||||
// let mut prefix = [0; 9];
|
||||
// reader.read_exact(&mut prefix)?;
|
||||
Self::Subtype2F {}
|
||||
let _inner_length = reader.read_u32::<LittleEndian>()?;
|
||||
|
||||
let field_number = decode_varint(&mut reader)?;
|
||||
let message_length = read_quirky_length(&mut reader)?;
|
||||
Self::Subtype2F {
|
||||
field_number,
|
||||
sub_type_2f: Subtype2F::decode(&reader[..message_length])?,
|
||||
payload,
|
||||
}
|
||||
}
|
||||
|
||||
_ => Self::Unknown { sub_type, payload },
|
||||
|
||||
Reference in new issue
Block a user