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

时间:2017-11-21 10:28:39

标签: c++ zeromq unions flatbuffers

这些天我和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还是事件偏移?

1 个答案:

答案 0 :(得分:1)

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

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

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

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