#pdu #dis #simulation #distributed #interactive #protocols #byte

dis-rs

在Rust中实现分布式交互仿真协议。此主crate包含PDU实现,并提供从Rust数据结构到线格式以及相反的读写PDU的功能

15个版本 (7个重大更改)

0.9.0 2024年6月26日
0.7.0 2024年3月12日
0.5.2 2023年10月4日
0.5.0 2023年4月1日
0.2.1 2022年11月7日

#2#pdu

Download history 155/week @ 2024-06-26 31/week @ 2024-07-03 168/week @ 2024-07-24 48/week @ 2024-07-31

每月216次下载

MIT 许可证

1.5MB
20K SLoC

DIS for Rust

dis-rs是Rust中分布式交互仿真(DIS)协议的实现。它提供结构和函数来构建应用程序中的PDUs,通过网络发送它们,并将接收到的字节流解析为PDUs。

PDU的构建是通过建造者模式构造函数完成的。

给定一个包含网络数据的缓冲区,库可以返回缓冲区中存在的多个DIS版本的多个PDUs。

库支持标准的第6版和第7版。作为一个经验法则,库主要是为了支持v7(在数据建模方面),并提供对v6的兼容性,对用户来说是透明的(即,解析传入的v6 PDU,然后存储在v7模型中,并根据头部的版本信息将其放回线路上)。

功能

以下是dis-rs支持的DIS PDUs/功能的概述。"读取"表示从字节流中读取PDU。"写入"表示在结构中构造PDU并将其序列化为缓冲区。

PDU 支持
其他 V
实体状态 V
V
爆炸 V
碰撞 V
服务请求 V
补给提议 V
补给接收 V
取消补给 V
维修完成 V
维修响应 V
创建实体 V
删除实体 V
开始恢复 V
停止冻结 V
确认 V
动作请求 V
动作响应 V
数据查询 V
设置数据 V
数据 V
事件报告 V
评论 V
电磁辐射 V
指示器 V
发射器 V
信号 V
接收器 V
IFF V
水下声波 V
补充发射实体状态 V
对讲信号
对讲控制
聚合状态 V
是否为组的一部分 V
转让所有权 V
是否为部分 V
地雷场状态
地雷场查询
地雷场数据
地雷场响应NACK
环境过程
网格数据
点对象状态
线性对象状态
区域对象状态
TSPI
外观
铰接部分
LE火
LED爆炸
创建实体R V
删除实体R V
开始恢复R V
停止冻结R V
确认R V
动作请求R V
动作响应R V
数据查询R V
设置数据R V
数据R V
事件报告R V
评论R V
记录R V
设置记录R V
记录查询R V
碰撞弹性 V
实体状态更新 V
定向能量射击
实体损伤状态
信息操作动作
信息操作报告
属性 V

枚举

dis-rs使用SISO-REF-010参考映射线级编码到代码中枚举和值的实际名称。例如,可以在代码中使用枚举PduType::EntityState,而不是记住1表示该特定值。

这些枚举的代码是通过构建脚本从发布的SISO-REF-010.xml文件生成的。当前版本为32。

用法

构造PDUs

PDUs使用与PduHeaderPduBody结构关联的default()builder()相关函数构建。使用SomePdu::builder()构建PDU的Builder。Builder从PDU字段的默认值开始,您必须使用.with_field_name()函数设置字段。build()函数将Builder转换为构建的PDU的泛型主体(例如,Signal)。您在构造PDU时没有内部验证或检查字段的有效组合。

主要数据结构是Pdu,它由PduHeaderPduBody组成。主体是PduBody的一个变体,一个枚举,它在一个变体中包装特定PDU类型的特定结构(如Pdu::Signal(Signal))。特定的主体结构,例如EntityState,可以通过在结构上调用into_pdu_body()函数将其包装/转换为PduBody。此外,可以使用关联函数Pdu::finalize_from_parts(header, body, timestamp)将主体与PduHeader合并。这将为您提供完整的PDU。

解析

库公开了三个函数,用于将二进制数据(DIS线格式)从缓冲区解析为PDUs:parse()parse_v6_pdus()parse_v7_pdus()。每个函数的功能相同,其中通用的parse()函数返回缓冲区中的所有有效PDU,而其他函数则过滤出v6或v7版本PDU。

序列化

要将PDU序列化为字节(DIS线格式),只需在Pdu上调用serialize()函数,并将缓冲区作为参数提供。

资源

版权(C)2024 Zeeger Lubsen

依赖项