mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 18:24:05 +02:00
optimize should_parse_message
This commit is contained in:
parent
128bf1ceb2
commit
f4e4f2e26b
4 changed files with 14 additions and 18 deletions
|
|
@ -59,7 +59,7 @@ impl Parse for MessagePacket {
|
||||||
while packet_data.bits_left() > 6 {
|
while packet_data.bits_left() > 6 {
|
||||||
let message_type = MessageType::parse(&mut packet_data, state)?;
|
let message_type = MessageType::parse(&mut packet_data, state)?;
|
||||||
|
|
||||||
if state.parse_message_types.contains(&message_type) {
|
if state.should_parse_message(message_type) {
|
||||||
let message = Message::from_type(message_type, &mut packet_data, state)?;
|
let message = Message::from_type(message_type, &mut packet_data, state)?;
|
||||||
messages.push(message);
|
messages.push(message);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ pub struct Analyser {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MessageHandler for Analyser {
|
impl MessageHandler for Analyser {
|
||||||
fn does_handle(&self, message_type: MessageType) -> bool {
|
fn does_handle(message_type: MessageType) -> bool {
|
||||||
match message_type {
|
match message_type {
|
||||||
MessageType::GameEvent | MessageType::UserMessage => true,
|
MessageType::GameEvent | MessageType::UserMessage => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use crate::demo::parser::analyser::{Analyser, MatchState};
|
||||||
use crate::ParserState;
|
use crate::ParserState;
|
||||||
|
|
||||||
pub trait MessageHandler {
|
pub trait MessageHandler {
|
||||||
fn does_handle(&self, message_type: MessageType) -> bool;
|
fn does_handle(message_type: MessageType) -> bool;
|
||||||
|
|
||||||
fn handle_message(&mut self, message: Message, tick: u32);
|
fn handle_message(&mut self, message: Message, tick: u32);
|
||||||
}
|
}
|
||||||
|
|
@ -25,15 +25,14 @@ pub struct DemoHandler {
|
||||||
|
|
||||||
impl DemoHandler {
|
impl DemoHandler {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let mut state = ParserState::new();
|
|
||||||
let analyser = Analyser::new();
|
let analyser = Analyser::new();
|
||||||
state.parse_message_types.extend(analyser.get_message_types());
|
let state_handler = ParserState::new();
|
||||||
|
|
||||||
DemoHandler {
|
DemoHandler {
|
||||||
tick: 0,
|
tick: 0,
|
||||||
string_table_names: Vec::new(),
|
string_table_names: Vec::new(),
|
||||||
analyser,
|
analyser,
|
||||||
state_handler: state,
|
state_handler,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -101,11 +100,11 @@ impl DemoHandler {
|
||||||
|
|
||||||
fn handle_message(&mut self, message: Message) {
|
fn handle_message(&mut self, message: Message) {
|
||||||
let message_type = message.get_message_type();
|
let message_type = message.get_message_type();
|
||||||
if self.state_handler.does_handle(message_type) {
|
if ParserState::does_handle(message_type) {
|
||||||
self.state_handler.handle_message(message, self.tick);
|
self.state_handler.handle_message(message, self.tick);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if self.analyser.does_handle(message_type) {
|
if Analyser::does_handle(message_type) {
|
||||||
self.analyser.handle_message(message, self.tick);
|
self.analyser.handle_message(message, self.tick);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ use crate::demo::packet::stringtable::StringTableEntry;
|
||||||
use crate::demo::parser::handler::{MessageHandler, StringTableEntryHandler};
|
use crate::demo::parser::handler::{MessageHandler, StringTableEntryHandler};
|
||||||
use crate::demo::sendprop::SendProp;
|
use crate::demo::sendprop::SendProp;
|
||||||
use crate::Stream;
|
use crate::Stream;
|
||||||
|
use crate::demo::parser::analyser::Analyser;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct DemoMeta {
|
pub struct DemoMeta {
|
||||||
|
|
@ -28,7 +29,6 @@ pub struct ParserState {
|
||||||
pub server_classes: Vec<ServerClass>,
|
pub server_classes: Vec<ServerClass>,
|
||||||
pub instance_baselines: [HashMap<EntityId, Vec<SendProp>>; 2],
|
pub instance_baselines: [HashMap<EntityId, Vec<SendProp>>; 2],
|
||||||
pub demo_meta: DemoMeta,
|
pub demo_meta: DemoMeta,
|
||||||
pub parse_message_types: Vec<MessageType>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct StaticBaseline {
|
pub struct StaticBaseline {
|
||||||
|
|
@ -49,14 +49,7 @@ impl StaticBaseline {
|
||||||
|
|
||||||
impl ParserState {
|
impl ParserState {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let mut state = ParserState::default();
|
ParserState::default()
|
||||||
state.parse_message_types.extend_from_slice(&[
|
|
||||||
MessageType::ServerInfo,
|
|
||||||
MessageType::GameEventList,
|
|
||||||
MessageType::CreateStringTable,
|
|
||||||
MessageType::UpdateStringTable
|
|
||||||
]);
|
|
||||||
state
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle_data_table(
|
pub fn handle_data_table(
|
||||||
|
|
@ -73,10 +66,14 @@ impl ParserState {
|
||||||
pub fn handle_string_table_meta(&mut self, table: StringTableMeta) {
|
pub fn handle_string_table_meta(&mut self, table: StringTableMeta) {
|
||||||
self.string_tables.push(table);
|
self.string_tables.push(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn should_parse_message(&self, message_type: MessageType) -> bool {
|
||||||
|
Self::does_handle(message_type) || Analyser::does_handle(message_type)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MessageHandler for ParserState {
|
impl MessageHandler for ParserState {
|
||||||
fn does_handle(&self, message_type: MessageType) -> bool {
|
fn does_handle(message_type: MessageType) -> bool {
|
||||||
match message_type {
|
match message_type {
|
||||||
MessageType::ServerInfo
|
MessageType::ServerInfo
|
||||||
| MessageType::GameEventList
|
| MessageType::GameEventList
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue