mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 18:24:05 +02:00
optimize packet/message format a bit
This commit is contained in:
parent
11140b149b
commit
4cf1e92657
7 changed files with 36 additions and 28 deletions
13
Cargo.lock
generated
13
Cargo.lock
generated
|
|
@ -66,10 +66,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitstream_reader"
|
name = "bitstream_reader"
|
||||||
version = "0.6.3"
|
version = "0.6.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitstream_reader_derive 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitstream_reader_derive 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"bytecount 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -89,6 +90,11 @@ name = "bytecount"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bytecount"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
version = "1.3.2"
|
version = "1.3.2"
|
||||||
|
|
@ -678,7 +684,7 @@ name = "tf-demo-parser"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"better-panic 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"better-panic 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"bitstream_reader 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitstream_reader 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"enum-primitive-derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"enum-primitive-derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"enumflags2 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"enumflags2 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"enumflags2_derive 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"enumflags2_derive 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
@ -773,9 +779,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b"
|
"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b"
|
||||||
"checksum better-panic 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "64714970eb2081691f85a923b78a490fd7c3e256dcc83c7a5177314586563356"
|
"checksum better-panic 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "64714970eb2081691f85a923b78a490fd7c3e256dcc83c7a5177314586563356"
|
||||||
"checksum bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a606a02debe2813760609f57a64a2ffd27d9fdf5b2f133eaca0b248dd92cdd2"
|
"checksum bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a606a02debe2813760609f57a64a2ffd27d9fdf5b2f133eaca0b248dd92cdd2"
|
||||||
"checksum bitstream_reader 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b4ddd36b9f93bc10fb8c9ca3dc7bfd3212cc197244dcada7efd250fc3d7834c0"
|
"checksum bitstream_reader 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "af1a60e9456844ac6f5fbbe8c8ddc2d97a9e54080197dbac7cba53e1c7be56b8"
|
||||||
"checksum bitstream_reader_derive 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "14e4573210a0cc968772847e1db9705e546f60cc1525c5cbfbf470dfa1fa391c"
|
"checksum bitstream_reader_derive 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "14e4573210a0cc968772847e1db9705e546f60cc1525c5cbfbf470dfa1fa391c"
|
||||||
"checksum bytecount 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b92204551573580e078dc80017f36a213eb77a0450e4ddd8cfa0f3f2d1f0178f"
|
"checksum bytecount 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b92204551573580e078dc80017f36a213eb77a0450e4ddd8cfa0f3f2d1f0178f"
|
||||||
|
"checksum bytecount 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be0fdd54b507df8f22012890aadd099979befdba27713c767993f8380112ca7c"
|
||||||
"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
|
"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
|
||||||
"checksum cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1b4d380e1bab994591a24c2bdd1b054f64b60bef483a8c598c7c345bc3bbe"
|
"checksum cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1b4d380e1bab994591a24c2bdd1b054f64b60bef483a8c598c7c345bc3bbe"
|
||||||
"checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be"
|
"checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be"
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ name = "parse_demo"
|
||||||
path = "src/bin/main.rs"
|
path = "src/bin/main.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bitstream_reader = { version = "0.6.3", features = ["unsafe"] }
|
bitstream_reader = { version = "0.6.6", features = ["unsafe"] }
|
||||||
enum-primitive-derive = "0.1"
|
enum-primitive-derive = "0.1"
|
||||||
num-traits = "0.2"
|
num-traits = "0.2"
|
||||||
enumflags2 = "0.5"
|
enumflags2 = "0.5"
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use parse_display::{Display, FromStr};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::hint::unreachable_unchecked;
|
use std::hint::unreachable_unchecked;
|
||||||
use std::num::ParseIntError;
|
use std::num::{NonZeroU32, ParseIntError};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
#[derive(
|
#[derive(
|
||||||
|
|
@ -102,7 +102,7 @@ pub struct PacketEntitiesMessage {
|
||||||
pub entities: Vec<PacketEntity>,
|
pub entities: Vec<PacketEntity>,
|
||||||
pub removed_entities: Vec<EntityId>,
|
pub removed_entities: Vec<EntityId>,
|
||||||
pub max_entries: u16,
|
pub max_entries: u16,
|
||||||
pub delta: Option<u32>,
|
pub delta: Option<NonZeroU32>,
|
||||||
pub base_line: u8,
|
pub base_line: u8,
|
||||||
pub updated_base_line: bool,
|
pub updated_base_line: bool,
|
||||||
}
|
}
|
||||||
|
|
@ -186,7 +186,7 @@ impl Parse for PacketEntitiesMessage {
|
||||||
entities,
|
entities,
|
||||||
removed_entities,
|
removed_entities,
|
||||||
max_entries,
|
max_entries,
|
||||||
delta,
|
delta: delta.and_then(NonZeroU32::new),
|
||||||
base_line,
|
base_line,
|
||||||
updated_base_line,
|
updated_base_line,
|
||||||
})
|
})
|
||||||
|
|
@ -253,7 +253,7 @@ impl PacketEntitiesMessage {
|
||||||
return Err(ParseError::from(ParseError::PropIndexOutOfBounds {
|
return Err(ParseError::from(ParseError::PropIndexOutOfBounds {
|
||||||
index,
|
index,
|
||||||
prop_count: send_table.flattened_props.len(),
|
prop_count: send_table.flattened_props.len(),
|
||||||
}))
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct CreateStringTableMessage {
|
pub struct CreateStringTableMessage {
|
||||||
pub table: StringTable,
|
pub table: Box<StringTable>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
@ -85,7 +85,9 @@ impl Parse for CreateStringTableMessage {
|
||||||
compressed,
|
compressed,
|
||||||
name,
|
name,
|
||||||
};
|
};
|
||||||
Ok(CreateStringTableMessage { table })
|
Ok(CreateStringTableMessage {
|
||||||
|
table: Box::new(table),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,8 @@ pub enum UserMessageType {
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum UserMessage {
|
pub enum UserMessage {
|
||||||
SayText2(SayText2Message),
|
SayText2(Box<SayText2Message>),
|
||||||
Text(TextMessage),
|
Text(Box<TextMessage>),
|
||||||
ResetHUD(ResetHudMessage),
|
ResetHUD(ResetHudMessage),
|
||||||
Train(TrainMessage),
|
Train(TrainMessage),
|
||||||
VoiceSubtitle(VoiceSubtitleMessage),
|
VoiceSubtitle(VoiceSubtitleMessage),
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,22 @@
|
||||||
use bitstream_reader::{BitRead, BitSize, LazyBitRead, LittleEndian};
|
use bitstream_reader::{BitRead, BitSize, Endianness, LazyBitRead, LittleEndian};
|
||||||
|
|
||||||
use crate::demo::message::{Message, MessageType};
|
use crate::demo::message::{Message, MessageType};
|
||||||
use crate::demo::vector::Vector;
|
use crate::demo::vector::Vector;
|
||||||
use crate::{Parse, ParserState, ReadResult, Result, Stream};
|
use crate::{Parse, ParserState, ReadResult, Result, Stream};
|
||||||
|
|
||||||
|
#[derive(Debug, BitRead, BitSize)]
|
||||||
|
pub struct MessagePacketMeta {
|
||||||
|
pub flags: u32, // TODO
|
||||||
|
pub view_angles: ViewAngles,
|
||||||
|
pub sequence_in: u32,
|
||||||
|
pub sequence_out: u32,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct MessagePacket {
|
pub struct MessagePacket {
|
||||||
pub tick: u32,
|
pub tick: u32,
|
||||||
pub messages: Vec<Message>,
|
pub messages: Vec<Message>,
|
||||||
pub sequence_in: u32,
|
pub meta: LazyBitRead<MessagePacketMeta, LittleEndian>,
|
||||||
pub sequence_out: u32,
|
|
||||||
pub view_angles: LazyBitRead<ViewAngles, LittleEndian>,
|
|
||||||
pub flags: u32, // TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
|
@ -27,8 +32,8 @@ impl BitSize for ViewAngles {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitRead<LittleEndian> for ViewAngles {
|
impl<E: Endianness> BitRead<E> for ViewAngles {
|
||||||
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
fn read(stream: &mut bitstream_reader::BitStream<E>) -> ReadResult<Self> {
|
||||||
let view_origin_1 = Vector::read(stream)?;
|
let view_origin_1 = Vector::read(stream)?;
|
||||||
let view_angle_1 = Vector::read(stream)?;
|
let view_angle_1 = Vector::read(stream)?;
|
||||||
let local_view_angle_1 = Vector::read(stream)?;
|
let local_view_angle_1 = Vector::read(stream)?;
|
||||||
|
|
@ -46,12 +51,9 @@ impl BitRead<LittleEndian> for ViewAngles {
|
||||||
impl Parse for MessagePacket {
|
impl Parse for MessagePacket {
|
||||||
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
||||||
let tick = stream.read()?;
|
let tick = stream.read()?;
|
||||||
let flags = stream.read()?;
|
|
||||||
|
|
||||||
let view_angles = stream.read()?;
|
let meta = stream.read()?;
|
||||||
|
|
||||||
let sequence_in = stream.read()?;
|
|
||||||
let sequence_out = stream.read()?;
|
|
||||||
let length: u32 = stream.read()?;
|
let length: u32 = stream.read()?;
|
||||||
let mut packet_data = stream.read_bits(length as usize * 8)?;
|
let mut packet_data = stream.read_bits(length as usize * 8)?;
|
||||||
|
|
||||||
|
|
@ -70,10 +72,7 @@ impl Parse for MessagePacket {
|
||||||
let packet = MessagePacket {
|
let packet = MessagePacket {
|
||||||
tick,
|
tick,
|
||||||
messages,
|
messages,
|
||||||
view_angles,
|
meta,
|
||||||
sequence_in,
|
|
||||||
sequence_out,
|
|
||||||
flags,
|
|
||||||
};
|
};
|
||||||
Ok(packet)
|
Ok(packet)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ impl<T: MessageHandler> DemoHandler<T> {
|
||||||
match message {
|
match message {
|
||||||
Message::NetTick(message) => self.tick = message.tick,
|
Message::NetTick(message) => self.tick = message.tick,
|
||||||
Message::CreateStringTable(message) => {
|
Message::CreateStringTable(message) => {
|
||||||
self.handle_string_table(message.table)
|
self.handle_string_table(*message.table)
|
||||||
}
|
}
|
||||||
Message::UpdateStringTable(message) => {
|
Message::UpdateStringTable(message) => {
|
||||||
self.handle_table_update(message.table_id, message.entries)
|
self.handle_table_update(message.table_id, message.entries)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue