#f1 #gaming #codemasters #api-client #async-networking #api-bindings #api

f1-api

F1 API 是Codemasters公司F1视频游戏的遥测API的客户端库。它使用异步网络来解码传入的UDP数据包,并将它们转换为强类型Rust结构体。

2个不稳定版本

0.2.0 2021年6月20日
0.1.0 2020年3月22日

#1554 in 异步

32 每月下载量

MIT/Apache

150KB
3K SLoC

F1 API

rust Coverage Version License

现代F1视频游戏的遥测API的Rust实现。

该项目实现了当前一代F1视频游戏(由Codemasters提供)的遥测API的客户端库。库是用Rust编写的,使用tokio进行异步网络。

由❤️和🦀构建,作为Nord SDK的一部分。

入门

库的大部分内容处理接收和解析F1游戏发送的数据包的低级细节。用户需要交互的只有 F1 结构体及其高级接口。

use std::net::{IpAddr, SocketAddr};

use f1_api::F1;
use f1_api::packet::Packet::{
    Event, Lap, Motion, Participants, Session, Setup, Status, Telemetry
};
use tokio_stream::StreamExt;

#[tokio::main]
async fn main() {
    let ip_address = IpAddr::from([0, 0, 0, 0]);
    let port = 20777;
    let socket = SocketAddr::new(ip_address, port);

    let mut stream = F1::stream(socket).unwrap();

    while let Some(packet) = stream.next().await {
        match packet {
            Event(_) => println!("Received an Event packet"),
            Lap(_) => println!("Received a Lap packet"),
            Motion(_) => println!("Received a Motion packet"),
            Participants(_) => println!("Received a Participants packet"),
            Session(_) => println!("Received a Session packet"),
            Setup(_) => println!("Received aaSetup packet"),
            Status(_) => println!("Received a Status packet"),
            Telemetry(_) => println!("Received a Telemetry packet"),
        }
    }
}

F1::stream 是一个异步函数,返回一个传入数据包的流,这是与 f1-api crate 交互的推荐方式。

示例

示例文件夹包含展示如何使用此库的示例。例如,入门部分的代码可以使用以下命令运行

cargo run --example readme

更复杂的示例是 cli,它使用库分析传入的数据包并将游戏状态的有趣信息打印到终端。它可以运行

cargo run --example cli

许可

根据您的选择,许可协议为

贡献

除非您明确说明,否则任何有意提交以包含在作品中并由您定义的Apache-2.0许可中的贡献,均应按上述方式双许可,不附加任何其他条款或条件。

依赖关系

~4–15MB
~161K SLoC