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

sendprop decoding

This commit is contained in:
Robin Appelman 2019-08-10 22:30:12 +02:00
commit ff18680a02
25 changed files with 389 additions and 135 deletions

View file

@ -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 {}

View file

@ -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 {}

View file

@ -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 {}

View file

@ -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 {}

View file

@ -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)?),

View file

@ -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() })
}
}
}

View file

@ -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 {}

View file

@ -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 })
}

View file

@ -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;

View file

@ -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")]

View file

@ -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 {}