1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-04 02:24:12 +02:00

keep baselineprops seperate and add some tracing

This commit is contained in:
Robin Appelman 2021-07-29 19:16:24 +02:00
commit 24e83957d5
8 changed files with 213 additions and 40 deletions

View file

@ -5,6 +5,7 @@ use crate::demo::message::{Message, MessageType};
use crate::demo::parser::Encode;
use crate::demo::vector::Vector;
use crate::{Parse, ParserState, ReadResult, Result, Stream};
use tracing::{event, span, Level};
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, BitRead, BitWrite, PartialEq, Serialize, Deserialize, Clone)]
@ -118,15 +119,20 @@ impl<'a> Parse<'a> for MessagePacket<'a> {
let meta = stream.read()?;
let length: u32 = stream.read()?;
event!(Level::DEBUG, length, "reading packet data");
let mut packet_data = stream.read_bits(length as usize * 8)?;
let mut messages = Vec::with_capacity(8);
while packet_data.bits_left() > 6 {
let message_type = MessageType::read(&mut packet_data)?;
let _span =
span!(Level::INFO, "reading packet", message_type = ?message_type).entered();
if state.should_parse_message(message_type) && message_type != MessageType::Empty {
event!(Level::INFO, "parsing message");
messages.push(Message::from_type(message_type, &mut packet_data, state)?);
} else {
event!(Level::INFO, "skipping message");
Message::skip_type(message_type, &mut packet_data, state)?;
}
}

View file

@ -11,6 +11,7 @@ use self::synctick::SyncTickPacket;
use self::usercmd::UserCmdPacket;
use crate::demo::parser::Encode;
use serde::{Deserialize, Serialize};
use tracing::{event, span, Level};
pub mod consolecmd;
pub mod datatable;
@ -48,6 +49,19 @@ impl Packet<'_> {
Packet::StringTables(msg) => msg.tick,
}
}
pub fn set_tick(&mut self, tick: u32) {
match self {
Packet::Sigon(msg) => msg.tick = tick,
Packet::Message(msg) => msg.tick = tick,
Packet::SyncTick(msg) => msg.tick = tick,
Packet::ConsoleCmd(msg) => msg.tick = tick,
Packet::UserCmd(msg) => msg.tick = tick,
Packet::DataTables(msg) => msg.tick = tick,
Packet::Stop(msg) => msg.tick = tick,
Packet::StringTables(msg) => msg.tick = tick,
}
}
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
@ -83,6 +97,8 @@ impl Packet<'_> {
impl<'a> Parse<'a> for Packet<'a> {
fn parse(stream: &mut Stream<'a>, state: &ParserState) -> Result<Self> {
let packet_type = PacketType::read(stream)?;
let _span = span!(Level::INFO, "reading packet", packet_type = ?packet_type).entered();
event!(Level::INFO, "parsing packet");
Ok(match packet_type {
PacketType::Sigon => Packet::Sigon(MessagePacket::parse(stream, state)?),
PacketType::Message => Packet::Message(MessagePacket::parse(stream, state)?),