#packet #lfs #racing #connection #speed #live #strong-typing

insim

LiveForSpeed Insim实现,侧重于易用性和强类型

4个版本 (2个稳定版)

新增 2.0.0 2024年8月16日
1.0.0 2024年2月14日
1.0.0-alpha.22024年2月6日

#1 in #racing

每月下载42次

MIT许可证

380KB
7.5K SLoC

insim

insim是一个用于与Racing Simulator Live For Speed交互的Rust库。

其主要用途是通过Insim与LFS通信,但它还通过功能标志和其兄弟crate提供了一些用于整体处理LFS的额外工具。

目标是提供一个强类型、原生的Rust实现,而不是一系列字节上的薄层。

许多核心类型,如VehicleTrack等,已被包含在crate insim_core中,该crate被重新导出。

您可能需要使用https://en.lfsmanual.net/wiki/InSim.txt作为每个数据包描述和能做什么的详细参考。在可能的情况下,此crate将数据包中字段的命名与原始规范相匹配。在某些情况下,我们需要重命名或分离一些字段(最值得注意的是Con数据包中的thrbrk和cluhan)。

支持的功能

  • 通过TCP或UDP的insim
  • 通过LFS World Relay通过TCP和Websocket的insim

功能标志

以下是一份可以启用或禁用的[cargo功能][cargo-features]列表

名称 描述 默认?
serde 启用serde支持
pth 引入insim_pth并重新导出
smx 引入insim_smx并重新导出
tokio 启用tokio支持
blocking 启用阻塞/同步支持
websocket 通过Tungstenite使用Websocket启用LFSW Relay支持(需要tokio)

建立TCP连接(使用tokio)

let conn = insim::tcp("127.0.0.1:29999").connect_async().await?;
loop {
    let packet = conn.read().await?;
    println!("{:?}", packet);

    match packet {
        insim::Packet::Mci(_) => {
          println!("Got a MCI packet!")
        },
        _ => {},
    }
}

建立TCP连接(使用阻塞)

let conn = insim::tcp("127.0.0.1:29999").connect()?;
loop {
    let packet = conn.read()?;
    println!("{:?}", packet);

    match packet {
        insim::Packet::Mci(_) => {
          println!("Got a MCI packet!")
        },
        _ => {},
    }
}

建立LFS World Relay连接(使用tokio)

let conn = insim::relay()
    .relay_select_host("Nubbins AU Demo")
    .connect_async()
    .await?;

loop {
    let packet = conn.read().await?;
    println!("{:?}", packet);

    match packet {
        insim::Packet::Mci(_) => {
          println!("Got a MCI packet!")
        },
        _ => {},
    }
}

建立UDP连接(使用tokio)

let conn = insim::tcp("127.0.0.1:29999", None).connect_async().await?;
loop {
    let packet = conn.read().await?;
    println!("{:?}", packet);

    match packet {
        insim::Packet::Mci(_) => {
          println!("Got a MCI packet!")
        },
        _ => {},
    }
}

附加示例

有关更多示例,请参阅https://github.com/theangryangel/insim.rs/tree/main/examples

依赖

~8–17MB
~280K SLoC