mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-04 02:24:12 +02:00
sendprop decoding
This commit is contained in:
parent
164f88a32a
commit
ff18680a02
25 changed files with 389 additions and 135 deletions
|
|
@ -1,4 +1,4 @@
|
|||
use bitstream_reader::{BitRead, LittleEndian, BitSkip};
|
||||
use bitstream_reader::{BitRead, BitSkip, LittleEndian};
|
||||
|
||||
use crate::demo::sendprop::read_bit_coord;
|
||||
use crate::demo::vector::Vector;
|
||||
|
|
@ -45,4 +45,4 @@ impl BitRead<LittleEndian> for BSPDecalMessage {
|
|||
}
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for BSPDecalMessage{}
|
||||
impl BitSkip<LittleEndian> for BSPDecalMessage {}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use bitstream_reader::{BitRead, BitReadSized, LittleEndian, BitSkip};
|
||||
use bitstream_reader::{BitRead, BitReadSized, BitSkip, LittleEndian};
|
||||
|
||||
use crate::demo::message::stringtable::log_base2;
|
||||
use crate::{ReadResult, Stream};
|
||||
|
|
@ -41,4 +41,4 @@ impl BitRead<LittleEndian> for ClassInfoMessage {
|
|||
}
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for ClassInfoMessage{}
|
||||
impl BitSkip<LittleEndian> for ClassInfoMessage {}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
use std::collections::HashMap;
|
||||
use std::iter::FromIterator;
|
||||
|
||||
use bitstream_reader::{BitRead, LittleEndian, BitSkip};
|
||||
use bitstream_reader::{BitRead, BitSkip, LittleEndian};
|
||||
|
||||
use crate::demo::gameevent_gen::GameEventType;
|
||||
use crate::demo::gamevent::{
|
||||
GameEvent, GameEventDefinition, GameEventEntry, GameEventValue, GameEventValueType,
|
||||
RawGameEvent,
|
||||
};
|
||||
use crate::{Parse, ParserState, ReadResult, Result, Stream, ParseError};
|
||||
use crate::demo::parser::ParseBitSkip;
|
||||
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
||||
|
||||
fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<GameEventValue> {
|
||||
Ok(match definition.kind {
|
||||
|
|
@ -111,4 +111,4 @@ impl BitRead<LittleEndian> for GameEventListMessage {
|
|||
}
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for GameEventListMessage{}
|
||||
impl BitSkip<LittleEndian> for GameEventListMessage {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use crate::Stream;
|
||||
/// Messages that consists only of primitives and string and can be derived
|
||||
use bitstream_reader::{BitRead, LittleEndian, BitSize, BitSkip};
|
||||
use bitstream_reader::{BitRead, BitSize, BitSkip, LittleEndian};
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[derive(BitRead, Debug)]
|
||||
|
|
@ -10,7 +10,7 @@ pub struct FileMessage {
|
|||
pub requested: bool,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for FileMessage{}
|
||||
impl BitSkip<LittleEndian> for FileMessage {}
|
||||
|
||||
#[derive(BitRead, BitSize, Debug)]
|
||||
pub struct NetTickMessage {
|
||||
|
|
@ -24,7 +24,7 @@ pub struct StringCmdMessage {
|
|||
pub command: String,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for StringCmdMessage{}
|
||||
impl BitSkip<LittleEndian> for StringCmdMessage {}
|
||||
|
||||
#[derive(BitRead, BitSize, Debug)]
|
||||
pub struct SigOnStateMessage {
|
||||
|
|
@ -37,7 +37,7 @@ pub struct PrintMessage {
|
|||
pub value: String,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for PrintMessage{}
|
||||
impl BitSkip<LittleEndian> for PrintMessage {}
|
||||
|
||||
#[derive(BitRead, Debug)]
|
||||
pub struct ServerInfoMessage {
|
||||
|
|
@ -60,7 +60,7 @@ pub struct ServerInfoMessage {
|
|||
pub replay: bool,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for ServerInfoMessage{}
|
||||
impl BitSkip<LittleEndian> for ServerInfoMessage {}
|
||||
|
||||
#[derive(BitRead, BitSize, Debug)]
|
||||
pub struct SetPauseMessage {
|
||||
|
|
@ -94,7 +94,7 @@ pub struct EntityMessage {
|
|||
pub data: Stream,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for EntityMessage{}
|
||||
impl BitSkip<LittleEndian> for EntityMessage {}
|
||||
|
||||
#[derive(BitRead, BitSize, Debug)]
|
||||
pub struct PreFetchMessage {
|
||||
|
|
@ -111,7 +111,7 @@ pub struct MenuMessage {
|
|||
pub index: Stream,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for MenuMessage{}
|
||||
impl BitSkip<LittleEndian> for MenuMessage {}
|
||||
|
||||
#[derive(BitRead, Debug)]
|
||||
pub struct GetCvarValueMessage {
|
||||
|
|
@ -119,7 +119,7 @@ pub struct GetCvarValueMessage {
|
|||
pub value: String,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for GetCvarValueMessage{}
|
||||
impl BitSkip<LittleEndian> for GetCvarValueMessage {}
|
||||
|
||||
#[derive(BitRead, Debug)]
|
||||
#[endianness = "LittleEndian"]
|
||||
|
|
@ -129,4 +129,4 @@ pub struct CmdKeyValuesMessage {
|
|||
pub data: Stream,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for CmdKeyValuesMessage{}
|
||||
impl BitSkip<LittleEndian> for CmdKeyValuesMessage {}
|
||||
|
|
|
|||
|
|
@ -5,28 +5,28 @@ pub use generated::*;
|
|||
use serde::{Deserialize, Serialize};
|
||||
use serde_repr::{Deserialize_repr, Serialize_repr};
|
||||
|
||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
||||
use crate::demo::message::bspdecal::*;
|
||||
use crate::demo::message::classinfo::*;
|
||||
use crate::demo::message::gameevent::*;
|
||||
use crate::demo::message::packetentities::*;
|
||||
use crate::demo::message::setconvar::*;
|
||||
use crate::demo::message::stringtable::*;
|
||||
use crate::demo::message::tempentities::*;
|
||||
use crate::demo::message::usermessage::*;
|
||||
use crate::demo::message::voice::*;
|
||||
use crate::demo::message::setconvar::*;
|
||||
use crate::demo::parser::ParseBitSkip;
|
||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
||||
|
||||
pub mod bspdecal;
|
||||
pub mod classinfo;
|
||||
pub mod gameevent;
|
||||
pub mod generated;
|
||||
pub mod packetentities;
|
||||
pub mod setconvar;
|
||||
pub mod stringtable;
|
||||
pub mod tempentities;
|
||||
pub mod usermessage;
|
||||
pub mod voice;
|
||||
pub mod setconvar;
|
||||
|
||||
#[derive(Primitive, Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
|
||||
#[repr(u8)]
|
||||
|
|
@ -142,7 +142,11 @@ impl Message {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn from_type(message_type: MessageType, stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
||||
pub fn from_type(
|
||||
message_type: MessageType,
|
||||
stream: &mut Stream,
|
||||
state: &ParserState,
|
||||
) -> Result<Self> {
|
||||
Ok(match message_type {
|
||||
MessageType::Empty => Message::Empty,
|
||||
MessageType::File => Message::File(FileMessage::parse(stream, state)?),
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
use bitstream_reader::BitRead;
|
||||
use serde::{Serialize, Deserialize};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{Parse, ParserState, Result, Stream, ParseError};
|
||||
use crate::demo::packet::datatable::ServerClass;
|
||||
use crate::demo::sendprop::SendProp;
|
||||
use crate::demo::parser::ParseBitSkip;
|
||||
use crate::demo::sendprop::SendProp;
|
||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||
pub struct EntityId(u32);
|
||||
|
|
@ -81,13 +81,11 @@ impl ParseBitSkip for PacketEntitiesMessage {
|
|||
}
|
||||
|
||||
pub struct EntityUpdate {
|
||||
props: Vec<SendProp>
|
||||
props: Vec<SendProp>,
|
||||
}
|
||||
|
||||
impl Parse for EntityUpdate {
|
||||
fn parse(stream: &mut Stream, _state: &ParserState) -> Result<Self> {
|
||||
Ok(EntityUpdate {
|
||||
props: Vec::new()
|
||||
})
|
||||
Ok(EntityUpdate { props: Vec::new() })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
use bitstream_reader::{BitRead, BitReadSized, LittleEndian, BitSkip};
|
||||
use bitstream_reader::{BitRead, BitReadSized, BitSkip, LittleEndian};
|
||||
|
||||
use crate::demo::message::stringtable::log_base2;
|
||||
use crate::{ReadResult, Stream};
|
||||
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct SetConVarMessage {
|
||||
vars: Vec<(String, String)>,
|
||||
|
|
@ -14,14 +13,16 @@ impl BitRead<LittleEndian> for SetConVarMessage {
|
|||
let count: u8 = stream.read()?;
|
||||
let mut vars: Vec<(String, String)> = Vec::with_capacity(count as usize);
|
||||
for _ in 0..count {
|
||||
let key = stream.read().unwrap_or_else(|_| "Malformed cvar name".to_string());
|
||||
let value = stream.read().unwrap_or_else(|_| "Malformed cvar value".to_string());
|
||||
let key = stream
|
||||
.read()
|
||||
.unwrap_or_else(|_| "Malformed cvar name".to_string());
|
||||
let value = stream
|
||||
.read()
|
||||
.unwrap_or_else(|_| "Malformed cvar value".to_string());
|
||||
vars.push((key, value));
|
||||
}
|
||||
Ok(SetConVarMessage {
|
||||
vars
|
||||
})
|
||||
Ok(SetConVarMessage { vars })
|
||||
}
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for SetConVarMessage {}
|
||||
impl BitSkip<LittleEndian> for SetConVarMessage {}
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@ use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
|
|||
use num_traits::{PrimInt, Unsigned};
|
||||
use snap::Decoder;
|
||||
|
||||
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
||||
use crate::demo::packet::stringtable::{
|
||||
ExtraData, FixedUserdataSize, StringTable, StringTableEntry,
|
||||
};
|
||||
use crate::demo::parser::ParseBitSkip;
|
||||
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct CreateStringTableMessage {
|
||||
|
|
@ -105,7 +105,6 @@ impl ParseBitSkip for CreateStringTableMessage {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct UpdateStringTableMessage {
|
||||
pub entries: Vec<(u16, StringTableEntry)>,
|
||||
|
|
@ -246,7 +245,7 @@ fn read_table_entry(
|
|||
} else {
|
||||
None
|
||||
}
|
||||
.map(ExtraData::new);
|
||||
.map(ExtraData::new);
|
||||
|
||||
Ok(StringTableEntry { text, extra_data })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use crate::{Parse, ParserState, Result, Stream, ParseError};
|
||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
||||
|
||||
use super::packetentities::PacketEntity;
|
||||
use super::stringtable::read_var_int;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
use bitstream_reader::{BitRead, LittleEndian};
|
||||
use enum_primitive_derive::Primitive;
|
||||
use num_traits::FromPrimitive;
|
||||
use serde::{Serialize, Deserialize};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{ReadResult, Stream, Result, ParseError};
|
||||
use crate::demo::parser::ParseBitSkip;
|
||||
use crate::{ParseError, ReadResult, Result, Stream};
|
||||
|
||||
#[derive(Primitive, Clone, Copy, Debug)]
|
||||
pub enum UserMessageType {
|
||||
|
|
@ -102,12 +102,11 @@ impl BitRead<LittleEndian> for UserMessage {
|
|||
impl ParseBitSkip for UserMessage {
|
||||
fn parse_skip(stream: &mut Stream) -> Result<()> {
|
||||
let _ = stream.skip_bits(8)?;
|
||||
let length:u32 = stream.read_int(11)?;
|
||||
let length: u32 = stream.read_int(11)?;
|
||||
stream.skip_bits(length as usize).map_err(ParseError::from)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
|
||||
pub enum ChatMessageKind {
|
||||
#[serde(rename = "TF_Chat_All")]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use bitstream_reader::{BitRead, LittleEndian, BitSkip};
|
||||
use bitstream_reader::{BitRead, BitSkip, LittleEndian};
|
||||
|
||||
use crate::{ReadResult, Stream};
|
||||
|
||||
|
|
@ -30,7 +30,7 @@ impl BitRead<LittleEndian> for VoiceInitMessage {
|
|||
}
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for VoiceInitMessage{}
|
||||
impl BitSkip<LittleEndian> for VoiceInitMessage {}
|
||||
|
||||
#[derive(BitRead, Debug, Clone)]
|
||||
#[endianness = "LittleEndian"]
|
||||
|
|
@ -42,7 +42,7 @@ pub struct VoiceDataMessage {
|
|||
data: Stream,
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for VoiceDataMessage{}
|
||||
impl BitSkip<LittleEndian> for VoiceDataMessage {}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ParseSoundsMessage {
|
||||
|
|
@ -72,4 +72,4 @@ impl BitRead<LittleEndian> for ParseSoundsMessage {
|
|||
}
|
||||
}
|
||||
|
||||
impl BitSkip<LittleEndian> for ParseSoundsMessage{}
|
||||
impl BitSkip<LittleEndian> for ParseSoundsMessage {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue