zoukankan      html  css  js  c++  java
  • flatbuffers 代码集成

    参考上次的操作,因为默认的不是nodejs 模块友好的,使用了typescript 同时集成了代码

    schema

    union HttpCommand {
        HttpQuery,
        HttpResultSet,
        HttpError
    }
     
    table HttpMessage {
        message_id: uint;
        command: HttpCommand;
    }
     
    table HttpQuery {
        query: string;
    }
     
    table HttpError {
        error: string;
    }
     
    table HttpResultSet {
        columns: [string];
        rows: [HttpRow];
    }
     
    table HttpRow {
        values: [HttpColumnValue];
    }
     
    table HttpColumnValue {
        string_value: string;
    }
    root_type HttpMessage;

    生成代码

    flatc --ts http_message.fbs

    生成nodejs 模块友好的代码

    使用tsc 编译

    {
      "name": "first",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {
        "flatbuffers": "^1.12.0"
      },
      "scripts": {
        "watch": "tsc --watch"
      },
      "devDependencies": {
        "@types/flatbuffers": "^1.10.0",
        "typescript": "^4.2.3"
      }
    }

    代码集成

    const flatbuffers = require("flatbuffers").flatbuffers
    const {HttpQuery,HttpMessage,HttpCommand} = require("./http_message_generated")
    const builder = new flatbuffers.Builder(1024);
    const queryOffset = builder.createString("dalongrong");
    const httpQueryOffset = HttpQuery.createHttpQuery(builder,queryOffset);
    const messageId = 10000
    const message = HttpMessage.createHttpMessage(builder, messageId, HttpCommand.HttpQuery, httpQueryOffset);
    builder.finish(message);
    let msg =builder.asUint8Array()
    const buf = new flatbuffers.ByteBuffer(msg);
    const myHttpMessage = HttpMessage.getRootAsHttpMessage(buf);
    console.log("command:",myHttpMessage.commandType())
    if (myHttpMessage.commandType()==HttpCommand.HttpQuery){
        const httpQuery = myHttpMessage.command(new HttpQuery());
        console.log("query:",httpQuery.query())
    }

    运行效果

    参考资料

    https://google.github.io/flatbuffers/flatbuffers_guide_use_typescript.html
    https://google.github.io/flatbuffers/flatbuffers_guide_using_schema_compiler.html

  • 相关阅读:
    如何使用Java计算货币/钱~(How to calculate monetary values in Java)
    BigDecimal类
    状态码定义
    常见服务器返回状态码(Status Codes)
    2020-3-26学习地图
    ReentrantLock类
    HashSet类
    Vector类
    课程总结
    第十四周课程总结&实验报告
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14590501.html
Copyright © 2011-2022 走看看