#demo #parser #tf2 #json #output #tf #player

bin+lib tf-demo-parser

tf2 演示文件解析器

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解析器实现

MIT/Apache

1.5MB
30K SLoC

TF 演示文件解析器

Build Status

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