13 unstable releases (3 breaking)
0.4.0 | Feb 11, 2022 |
---|---|
0.3.3 | Aug 1, 2021 |
0.3.2 | Jul 27, 2021 |
0.2.6 | Jul 11, 2021 |
0.1.0 | Nov 29, 2020 |
119 downloads per month
740KB
18K
SLoC
TF Demo Parser
Parsing of tf2 demo files
Building
This project is build using rust and requires cargo
and friends, see the rust website
for how to get started.
Once rust is setup building is as simple as
cargo build --release
which will place the binary at target/release/parse_demo
Usage
Basic usage is as simple as parse_demo demofile.dem
which will output a "summary" of the demo file in JSON format.
Advanced usage
Loop trough every packet
use bitbuffer::BitRead;
use main_error::MainError;
use std::fs;
use tf_demo_parser::demo::header::Header;
use tf_demo_parser::demo::parser::{DemoHandler, RawPacketStream};
use tf_demo_parser::Demo;
fn main() -> Result<(), MainError> {
let file = fs::read("demofile.dem")?;
let demo = Demo::new(&file);
let mut handler = DemoHandler::default();
let mut stream = demo.get_stream();
let header = Header::read(&mut stream)?;
handler.handle_header(&header);
let mut packets = RawPacketStream::new(stream);
while let Some(packet) = packets.next(&handler.state_handler)? {
handler.handle_packet(packet).unwrap();
}
assert_eq!(false, packets.incomplete);
Ok(())
}
Handle demo data with a custom analyser
Sometimes it's easier to create a custom Analyser
to handle the demo data as it comes along.
See src/demo/parser/analyser.rs
for an example.
Once you have a custom analyser you can use it with:
DemoParser::new_all_with_analyser(demo.get_stream(), CustomAnalyser::new());
let (header, state) = parser.parse()?;
Dependencies
~6–13MB
~229K SLoC