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
|
|
@ -11,7 +11,7 @@ use parse_display::{Display, FromStr};
|
|||
use std::collections::HashMap;
|
||||
use std::fmt;
|
||||
use std::hint::unreachable_unchecked;
|
||||
use std::num::ParseIntError;
|
||||
use std::num::{NonZeroU32, ParseIntError};
|
||||
use std::rc::Rc;
|
||||
|
||||
#[derive(
|
||||
|
|
@ -102,7 +102,7 @@ pub struct PacketEntitiesMessage {
|
|||
pub entities: Vec<PacketEntity>,
|
||||
pub removed_entities: Vec<EntityId>,
|
||||
pub max_entries: u16,
|
||||
pub delta: Option<u32>,
|
||||
pub delta: Option<NonZeroU32>,
|
||||
pub base_line: u8,
|
||||
pub updated_base_line: bool,
|
||||
}
|
||||
|
|
@ -186,7 +186,7 @@ impl Parse for PacketEntitiesMessage {
|
|||
entities,
|
||||
removed_entities,
|
||||
max_entries,
|
||||
delta,
|
||||
delta: delta.and_then(NonZeroU32::new),
|
||||
base_line,
|
||||
updated_base_line,
|
||||
})
|
||||
|
|
@ -253,7 +253,7 @@ impl PacketEntitiesMessage {
|
|||
return Err(ParseError::from(ParseError::PropIndexOutOfBounds {
|
||||
index,
|
||||
prop_count: send_table.flattened_props.len(),
|
||||
}))
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
|||
|
||||
#[derive(Debug)]
|
||||
pub struct CreateStringTableMessage {
|
||||
pub table: StringTable,
|
||||
pub table: Box<StringTable>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
@ -85,7 +85,9 @@ impl Parse for CreateStringTableMessage {
|
|||
compressed,
|
||||
name,
|
||||
};
|
||||
Ok(CreateStringTableMessage { table })
|
||||
Ok(CreateStringTableMessage {
|
||||
table: Box::new(table),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -71,8 +71,8 @@ pub enum UserMessageType {
|
|||
|
||||
#[derive(Debug)]
|
||||
pub enum UserMessage {
|
||||
SayText2(SayText2Message),
|
||||
Text(TextMessage),
|
||||
SayText2(Box<SayText2Message>),
|
||||
Text(Box<TextMessage>),
|
||||
ResetHUD(ResetHudMessage),
|
||||
Train(TrainMessage),
|
||||
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::vector::Vector;
|
||||
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)]
|
||||
pub struct MessagePacket {
|
||||
pub tick: u32,
|
||||
pub messages: Vec<Message>,
|
||||
pub sequence_in: u32,
|
||||
pub sequence_out: u32,
|
||||
pub view_angles: LazyBitRead<ViewAngles, LittleEndian>,
|
||||
pub flags: u32, // TODO
|
||||
pub meta: LazyBitRead<MessagePacketMeta, LittleEndian>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
|
@ -27,8 +32,8 @@ impl BitSize for ViewAngles {
|
|||
}
|
||||
}
|
||||
|
||||
impl BitRead<LittleEndian> for ViewAngles {
|
||||
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
||||
impl<E: Endianness> BitRead<E> for ViewAngles {
|
||||
fn read(stream: &mut bitstream_reader::BitStream<E>) -> ReadResult<Self> {
|
||||
let view_origin_1 = Vector::read(stream)?;
|
||||
let 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 {
|
||||
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
||||
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 mut packet_data = stream.read_bits(length as usize * 8)?;
|
||||
|
||||
|
|
@ -70,10 +72,7 @@ impl Parse for MessagePacket {
|
|||
let packet = MessagePacket {
|
||||
tick,
|
||||
messages,
|
||||
view_angles,
|
||||
sequence_in,
|
||||
sequence_out,
|
||||
flags,
|
||||
meta,
|
||||
};
|
||||
Ok(packet)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ impl<T: MessageHandler> DemoHandler<T> {
|
|||
match message {
|
||||
Message::NetTick(message) => self.tick = message.tick,
|
||||
Message::CreateStringTable(message) => {
|
||||
self.handle_string_table(message.table)
|
||||
self.handle_string_table(*message.table)
|
||||
}
|
||||
Message::UpdateStringTable(message) => {
|
||||
self.handle_table_update(message.table_id, message.entries)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue