4个版本 (2个稳定版)
新增 2.0.0 | 2024年8月16日 |
---|---|
1.0.0 | 2024年2月14日 |
1.0.0-alpha.2 | 2024年2月6日 |
#1 in #racing
每月下载42次
380KB
7.5K SLoC
insim
insim是一个用于与Racing Simulator Live For Speed交互的Rust库。
其主要用途是通过Insim与LFS通信,但它还通过功能标志和其兄弟crate提供了一些用于整体处理LFS的额外工具。
目标是提供一个强类型、原生的Rust实现,而不是一系列字节上的薄层。
许多核心类型,如Vehicle、Track等,已被包含在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