15 个版本
0.5.1 | 2024 年 3 月 29 日 |
---|---|
0.5.0 | 2023 年 12 月 23 日 |
0.4.0 | 2022 年 2 月 11 日 |
0.3.3 | 2021 年 8 月 1 日 |
0.1.0 | 2020 年 11 月 29 日 |
#392 在 解析器实现
1.5MB
30K SLoC
TF 演示文件解析器
tf2 演示文件解析
构建
本项目使用 Rust 构建,需要 cargo
和相关工具,有关如何开始的信息,请参阅 Rust 网站。
一旦设置好 Rust,构建就非常简单
cargo build --release
这将把二进制文件放置在 target/release/parse_demo
使用方法
基本使用非常简单,只需 parse_demo demofile.dem
,这将以 JSON 格式输出演示文件的“摘要”。
将 detailed_summary
参数传递给 parse_demo
的末尾将输出一个表格,包含在演示记录期间曾经登录服务器的所有玩家的得分板信息。创建演示的玩家将在输出中突出显示。
高级使用
循环每个数据包
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(())
}
使用自定义分析器处理演示数据
有时创建一个自定义的 Analyser
来处理随时间而来的演示数据会更简单。
请参阅 src/demo/parser/analyser.rs
以获取示例。
一旦您有了自定义分析器,您可以使用它
DemoParser::new_all_with_analyser(demo.get_stream(), CustomAnalyser::new());
let (header, state) = parser.parse()?;
依赖项
~5–18MB
~233K SLoC