gpt4 book ai didi

c# - FlatBuffers:使用 union 发送多种数据包类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:58 27 4
gpt4 key购买 nike

我将通过连接发送多种缓冲区类型。为简单起见,想象一个类似这样的模式:

namespace MyEvents;  

table EventOne
{
id:uint;
timestamp:ulong;
adress:string;
}

table EventTwo
{
id:uint;
timestamp:ulong;
strength:float;
}

union Events {EventOne, EventTwo}

table EventHolder
{
theEvent:Events;
}

root_type EventHolder;

我为 C++ 和 C# 生成所需的文件,并根据需要将它们包含在我各自的项目中。

下面是我在 C++ 中编码事件的方式 - 这里是 EventOne 类型的事件:

...  
uint32_t anId(645);
uint64_t aTimestamp(1234567);
string anAddress("00::00::45::56::47::e5");

flatbuffers::FlatBufferBuilder builder;
auto addressOffset= builder.CreateString(anAddress);
auto eventOneOffset= MyEvents::CreateEventOne(builder, anId, aTimestamp, addressOfset);

// Here is where I am confused - how to create the EventHolder object.
// Original code I posted about - commented out, but has error.
//auto eventHolderOffset= MyEvents::CreateEventHolder(builder, MyEvents::Events_EventOne, eventOneOffset); // Compile error here.

auto eventHolderOffset= MyEvents::CreateEventHolder(builder, MyEvents::Events_EventOne, eventOneOffset.Union()); // No compile error here.

builder.Finish(eventHolderOffset);

// Access buffer pointer and size and send it on its way.

请注意,我在创建 EventHolder 对象时遇到问题:我有一个类型为 FlatBuffers::Offset 的偏移量,但 CreateEventHolder 函数采用类型为 FlatBuffers::Offset 的偏移量。

  • 这个过程(包含 union 类型对象的表)是使用 FlatBuffers 发送多种数据包类型的正确方法吗?编辑:答案似乎是"is"
  • 我是否遗漏了事件的由内而外的编码步骤?编辑:不!效果很好。
  • 如果这个过程是正确的,我需要做什么来避免类型冲突?编辑:正如 Aardappel 所说,从 Flatbuffers encoding then decoding C++ double array + table + union returns junk 开始,我只需要将 .Union() 添加到偏移参数。

如有任何帮助,我们将不胜感激。 FWIW,我在 C++ 中编码,并在那里进行测试解码,但通过 UDP 将数据发送到 C# 应用程序以在那里进行最终解码。为此,我对数据包进行了类型测试并进行了相应的解释。

更新:我找到了一个示例,发现我需要将 Union 函数添加到 CreateEventHolder 中偏移量的末尾。我现在可以走了。

最佳答案

尝试 eventOneOffset.Union() 获取该偏移量的无类型版本。也许这没有被充分记录。

关于c# - FlatBuffers:使用 union 发送多种数据包类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com