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 {
|
||||
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)?;
|
||||
messages.push(message);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ pub struct Analyser {
|
|||
}
|
||||
|
||||
impl MessageHandler for Analyser {
|
||||
fn does_handle(&self, message_type: MessageType) -> bool {
|
||||
fn does_handle(message_type: MessageType) -> bool {
|
||||
match message_type {
|
||||
MessageType::GameEvent | MessageType::UserMessage => true,
|
||||
_ => false,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ use crate::demo::parser::analyser::{Analyser, MatchState};
|
|||
use crate::ParserState;
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
@ -25,15 +25,14 @@ pub struct DemoHandler {
|
|||
|
||||
impl DemoHandler {
|
||||
pub fn new() -> Self {
|
||||
let mut state = ParserState::new();
|
||||
let analyser = Analyser::new();
|
||||
state.parse_message_types.extend(analyser.get_message_types());
|
||||
let state_handler = ParserState::new();
|
||||
|
||||
DemoHandler {
|
||||
tick: 0,
|
||||
string_table_names: Vec::new(),
|
||||
analyser,
|
||||
state_handler: state,
|
||||
state_handler,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -101,11 +100,11 @@ impl DemoHandler {
|
|||
|
||||
fn handle_message(&mut self, message: Message) {
|
||||
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);
|
||||
return;
|
||||
}
|
||||
if self.analyser.does_handle(message_type) {
|
||||
if Analyser::does_handle(message_type) {
|
||||
self.analyser.handle_message(message, self.tick);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ use crate::demo::packet::stringtable::StringTableEntry;
|
|||
use crate::demo::parser::handler::{MessageHandler, StringTableEntryHandler};
|
||||
use crate::demo::sendprop::SendProp;
|
||||
use crate::Stream;
|
||||
use crate::demo::parser::analyser::Analyser;
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct DemoMeta {
|
||||
|
|
@ -28,7 +29,6 @@ pub struct ParserState {
|
|||
pub server_classes: Vec<ServerClass>,
|
||||
pub instance_baselines: [HashMap<EntityId, Vec<SendProp>>; 2],
|
||||
pub demo_meta: DemoMeta,
|
||||
pub parse_message_types: Vec<MessageType>,
|
||||
}
|
||||
|
||||
pub struct StaticBaseline {
|
||||
|
|
@ -49,14 +49,7 @@ impl StaticBaseline {
|
|||
|
||||
impl ParserState {
|
||||
pub fn new() -> Self {
|
||||
let mut state = ParserState::default();
|
||||
state.parse_message_types.extend_from_slice(&[
|
||||
MessageType::ServerInfo,
|
||||
MessageType::GameEventList,
|
||||
MessageType::CreateStringTable,
|
||||
MessageType::UpdateStringTable
|
||||
]);
|
||||
state
|
||||
ParserState::default()
|
||||
}
|
||||
|
||||
pub fn handle_data_table(
|
||||
|
|
@ -73,10 +66,14 @@ impl ParserState {
|
|||
pub fn handle_string_table_meta(&mut self, table: StringTableMeta) {
|
||||
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 {
|
||||
fn does_handle(&self, message_type: MessageType) -> bool {
|
||||
fn does_handle(message_type: MessageType) -> bool {
|
||||
match message_type {
|
||||
MessageType::ServerInfo
|
||||
| MessageType::GameEventList
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue