使用Flatbuffer Union通过ZeroMQ发送不同的事件

问题描述 投票:0回答:1

这些天我和flatbuffers很挣扎,我可以帮忙。我想使用flatbuffer通过TCP发送包含不同数据的事件(使用ZeroMQ)。因此,我正在使用联盟。

// event.fbs
namespace event;

table ByteArray {
    bytes:[byte];
}

table OtherData {
    id:uint;
    value:uint;
}

union EventData {
    ByteArray,
    OtherData,
    String:string
}

table Event {
  name:string (key);
  timestamp:ulong = -1;
  data:EventData;
}

root_type Event;

在我的C ++类中,我想创建新事件并将它们传输到我的Publisher类,它通过ZeroMQ发送事件。有一个很好的或常见的方式吗?我在考虑这样的事情:

mPublisher.publishEvent(event::Event("event1", 0, "dataString"));
mPublisher.publishEvent(event::Event("event2", 1, byteArray));

上面的例子不起作用,因为没有这样的构造函数。有没有一种很好的方法来创建具有不同数据的多个事件?我怎么能把这些flatbuffer-events传递给像我的出版商这样的另一个班级呢?我应该通过flatbuffer还是事件偏移?

c++ zeromq unions flatbuffers
1个回答
1
投票

您只需要使用提供的实际构造函数,因此它看起来像:

event::CreateEvent(fbb, "event1", 0, fbb.CreateString("dataString"));

还有一个event::CreateByteArray等。请参阅生成的代码或教程。

event::CreateEvent将一个偏移量返回到未完成的FlatBuffer中,因此通常不适合传递给非FlatBuffer函数。您需要在该偏移量上调用fbb.Finish(),然后将生成的缓冲区传递给其他函数(再次参见教程)。

© www.soinside.com 2019 - 2024. All rights reserved.