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
每月216次下载
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使用与PduHeader
或PduBody
结构关联的default()
或builder()
相关函数构建。使用SomePdu::builder()
构建PDU的Builder。Builder从PDU字段的默认值开始,您必须使用.with_field_name()
函数设置字段。build()
函数将Builder转换为构建的PDU的泛型主体(例如,Signal
)。您在构造PDU时没有内部验证或检查字段的有效组合。
主要数据结构是Pdu
,它由PduHeader
和PduBody
组成。主体是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()
函数,并将缓冲区作为参数提供。
资源
- SISO: https://www.sisostds.org - 维护DIS标准和相关材料的组织。
- 有关DIS的许多背景材料可以在OpenDIS找到:http://open-dis.org 和 https://github.com/open-dis。
- 维基百科:https://en.wikipedia.org/wiki/Distributed_Interactive_Simulation。
- DIS数据字典(仅限版本6):http://faculty.nps.edu/brutzman/vrtp/mil/navy/nps/disEnumerations/JdbeHtmlFiles/pdu/。
版权(C)2024 Zeeger Lubsen