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

handle older prefetch messages

This commit is contained in:
Robin Appelman 2025-04-29 21:14:55 +02:00
commit 442c4963f6
4 changed files with 48 additions and 7 deletions

View file

@ -112,13 +112,6 @@ pub struct EntityMessage<'a> {
pub data: Stream<'a>, pub data: Stream<'a>,
} }
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(BitRead, BitWrite, Debug, PartialEq, Serialize, Deserialize, Clone)]
pub struct PreFetchMessage {
#[size = 14]
pub index: u16,
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] #[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(BitRead, BitWrite, Debug, PartialEq, Serialize, Deserialize, Clone)] #[derive(BitRead, BitWrite, Debug, PartialEq, Serialize, Deserialize, Clone)]
#[endianness = "LittleEndian"] #[endianness = "LittleEndian"]

View file

@ -9,6 +9,7 @@ use crate::demo::message::stringtable::*;
use crate::demo::message::tempentities::*; use crate::demo::message::tempentities::*;
use crate::demo::message::usermessage::*; use crate::demo::message::usermessage::*;
use crate::demo::message::voice::*; use crate::demo::message::voice::*;
use crate::demo::message::prefetch::*;
use crate::demo::parser::{Encode, ParseBitSkip}; use crate::demo::parser::{Encode, ParseBitSkip};
use crate::{Parse, ParserState, Result, Stream}; use crate::{Parse, ParserState, Result, Stream};
use bitbuffer::{BitRead, BitWrite, BitWriteStream, LittleEndian}; use bitbuffer::{BitRead, BitWrite, BitWriteStream, LittleEndian};
@ -25,6 +26,7 @@ pub mod stringtable;
pub mod tempentities; pub mod tempentities;
pub mod usermessage; pub mod usermessage;
pub mod voice; pub mod voice;
pub mod prefetch;
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema_repr))] #[cfg_attr(feature = "schema", derive(schemars::JsonSchema_repr))]
#[derive( #[derive(

View file

@ -0,0 +1,45 @@
use bitbuffer::{BitWriteStream, LittleEndian};
use serde::{Deserialize, Serialize};
use crate::{Parse, ParserState, Stream, Result};
use crate::demo::parser::{Encode, ParseBitSkip};
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
pub struct PreFetchMessage {
pub index: u16,
}
impl PreFetchMessage {
fn bit_size(protocol_version: u32) -> usize {
if protocol_version > 22 {
14
} else {
13
}
}
}
impl<'a> Parse<'a> for PreFetchMessage {
fn parse(stream: &mut Stream<'a>, state: &ParserState) -> Result<Self> {
let size = Self::bit_size(state.protocol_version);
Ok(PreFetchMessage {
index: stream.read_sized(size)?,
})
}
}
impl Encode for PreFetchMessage {
fn encode(&self, stream: &mut BitWriteStream<LittleEndian>, state: &ParserState) -> Result<()> {
let size = Self::bit_size(state.protocol_version);
stream.write_int(self.index, size)?;
Ok(())
}
}
impl<'a> ParseBitSkip<'a> for PreFetchMessage {
fn parse_skip(stream: &mut Stream<'a>, state: &ParserState) -> Result<()> {
let size = Self::bit_size(state.protocol_version);
stream.skip_bits(size)?;
Ok(())
}
}

View file

@ -89,6 +89,7 @@ impl<'a, A: MessageHandler> DemoParser<'a, A> {
pub fn parse(self) -> Result<(Header, A::Output)> { pub fn parse(self) -> Result<(Header, A::Output)> {
let (header, mut ticker) = self.ticker()?; let (header, mut ticker) = self.ticker()?;
dbg!(&header);
while ticker.tick()? { while ticker.tick()? {
// noop // noop
} }