2

Wondering if anyone out there has had any success or attempted to integrate flatbuffers with duktape, so far I can only get about 1/2 way there...

I can push a flatbuffer from C, and access it from JS with the following code, and it seems to work perfectly:

duk_push_heapptr(ctx, t->ptr);
duk_push_external_buffer(ctx);
duk_config_buffer(ctx, -1, d.data, d.length);
duk_call(ctx, 1);

However, i cant quite seem to achieve the same success passing a flatbuffer from JS to C (or C++ in my case):

void * buff;
duk_size_t sz;
buff = duk_require_buffer_data(ctx, 1, &sz);
if (VerifyLogEventBuffer(flatbuffers::Verifier((uint8_t *)buff, (unsigned int)sz))) {
    std::cout << "Buffer is good here!" << std::endl;
} else {
std::cout << "Buffer is broken here even" << std::endl;
}

Any ideas what i could be doing wrong here? No issues compiling, but the the flatbuffer is unreadable.

Edit: I should also include the relevant JS --

        var fbb = new flatbuffers.Builder(1024);

    PGS.Buffers.LogEvent.startLogEvent(fbb);
    PGS.Buffers.LogEvent.addLevel(fbb,'WARN');
    PGS.Buffers.LogEvent.addSource(fbb,"js");
    PGS.Buffers.LogEvent.addText(fbb,"1 Event Emitted from JS now with a very long text string to make sure our buffer size increases.");
    var toEmit = PGS.Buffers.LogEvent.endLogEvent(fbb);
    PGS.Buffers.LogEvent.finishLogEventBuffer(fbb, toEmit);

   // var b = new Buffer(fbb.asUint8Array());
    print("1 Attempting to raise long log event using dataBuffer and Buffer");
    raise('log', new Buffer(fbb.asUint8Array()));

0 Answers0