2017-11-21 22 views
0

フラットバッファではかなり苦労しています。 フラットバッファを使用して、TCP(ZeroMQを使用)上で異なるデータを含むイベントを送信したいと考えています。したがって、Unionを使用しています。フラットバッファユニオンを使用して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++クラスでは、新しいイベントを作成し、ZeroMQ経由でイベントを送信するパブリッシャークラスに転送したいと考えています。これを行うには良い、または一般的な方法がありますか?

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

このようなコンストラクタがないため、上記の例は機能しません。異なるデータを持つ複数のイベントを作成する良い方法はありますか?これらのフラットバッファイベントをパブリッシャーのような別のクラスにどのように渡す必要がありますか?フラットバッファまたはイベントオフセットを渡すべきですか?

答えて

0

あなただけ提供される実際のコンストラクタを使用する必要があるので、それは次のようになります。event::CreateByteArrayなどが生成されたコード、またはチュートリアルを参照してくださいもあり

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

を。

event::CreateEventは、未完成のFlatBufferにオフセットを返します。したがって、通常、FlatBuffer以外の関数に渡すのには適していません。そのオフセットにfbb.Finish()を呼び出して、結果のバッファを他の関数に渡したい(もう一度チュートリアルを参照してください)。

関連する問題