#udp #packet-parser #dash #messages #udp-packet #specifically #forza-motorsport

forza_dataout_parse

此包可以帮助您解析《Forza Motorsport》的数据输出UPD数据包。

2个不稳定版本

0.2.0 2024年3月10日
0.1.0 2024年3月1日

#1013 in 解析器实现

MIT 许可证

17KB
234 代码行

Forza_dataout_parse

这是一个专门用于解析Forza DataOut输出消息的Rust库,目前支持解析《Forza MotorSport》仪表盘的消息。

安装

编辑Cargo.toml

  1. 编辑您的 Cargo.toml
  2. 添加 forza_dataout_parse 后面跟着 [dependencies]. like
    [dependencies]
    # ...
    forza_dataout_parse = "x"
    
  3. 执行shell
    cargo update
    

或者使用shell命令

cd /your/project/path
cargo add forza_dataout_parse

使用方法

这是一个简单的示例,用于监听ForzaMotorsport UPD。

use std::net::UdpSocket;
use std::thread;
use std::time::Duration;
use std::io::{self, Write};
extern crate forza_dataout_parse;
use forza_dataout_parse::dash_parser;

fn main() {
    let socket = UdpSocket::bind("0.0.0.0:5300").expect("Couldn't bind to address");
    let stdout = io::stdout();
    let mut handle = stdout.lock();

    loop {
        let mut buffer = [0; 1024];
        match socket.recv_from(&mut buffer) {
            Ok((amt, _)) => {                
                let datagram = dash_parser::parse(&buffer[..amt]);
                
                if datagram.is_race_on == 1 {
                    print!("\rspeed = {:#?}, current_lap={:#?}", datagram.get_speed_by_kmh(), datagram.current_lap);
                    // println!("{:#?}", datagram.accel);
                    let _ = handle.flush();
                }
                thread::sleep(Duration::from_micros(10));
            }
            Err(e) => {
                eprintln!("Error receiving data: {}", e);
                thread::sleep(Duration::from_micros(10));
                continue;
            }
        }
    }
}

功能映射

  • 😄支持 to_json() 和由 serde @0.1.1 提供的序列化能力
  • 👌对 dash 数据报的基本解析 @0.1.0

依赖项

~0.7–1.6MB
~35K SLoC