2 个版本
0.1.1 | 2023年12月25日 |
---|---|
0.1.0 | 2023年12月25日 |
#5 in #rtps
165KB
4K SLoC
Rust 的 RTPS 协议解析器
此库实现了 RTPS 协议的消息解析。
DDS 是一种以数据为中心的连接中间件协议和 API 标准。DDS 的主要目标是确保在正确的时间和地点共享正确的数据,即使是在时间解耦的发布者和消费者之间。
此库使用了 Rust 编写的优秀 DDS 库 Dust DDS 的代码。提取代码的动机是为了使 RTPS 数据包解析功能可用于其他程序。例如,一个 DDS 中间件可以检查 RTPS 消息,实时修改它们或基于某些防火墙逻辑删除它们。
示例
假设你有一个字节切片,并想读取其内容
let data = Arc::new([
b'R', b'T', b'P', b'S', // Protocol
2, 3, 9, 8, // ProtocolVersion | VendorId
3, 3, 3, 3, // GuidPrefix
3, 3, 3, 3, // GuidPrefix
3, 3, 3, 3, // GuidPrefix
0x15, 0b_0000_0011, 40, 0, // Submessage header
0, 0, 16, 0, // extraFlags, octetsToInlineQos
1, 2, 3, 4, // readerId: value[4]
6, 7, 8, 9, // writerId: value[4]
0, 0, 0, 0, // writerSN: high
5, 0, 0, 0, // writerSN: low
6, 0, 4, 0, // inlineQos: parameterId_1, length_1
10, 11, 12, 13, // inlineQos: value_1[length_1]
7, 0, 4, 0, // inlineQos: parameterId_2, length_2
20, 21, 22, 23, // inlineQos: value_2[length_2]
1, 0, 1, 0, // inlineQos: Sentinel
0x07, 0b_0000_0101, 28, 0, // Submessage header
1, 2, 3, 4, // readerId: value[4]
6, 7, 8, 9, // writerId: value[4]
0, 0, 0, 0, // firstSN: SequenceNumber: high
5, 0, 0, 0, // firstSN: SequenceNumber: low
0, 0, 0, 0, // lastSN: SequenceNumberSet: high
7, 0, 0, 0, // lastSN: SequenceNumberSet: low
2, 0, 0, 0, // count: Count: value (long)
]);
let msg = RtpsMessageRead::new(data);
println!("Received {} submessages", msg.submessages().len());
许可
本项目保留了原始作品的许可,并使用 Apache License Version 2.0 许可。
依赖关系
~7–16MB
~184K SLoC