//import Protobuf from 'protobufjs' const $protoRoot = require('./thj.js') export default new (class { private readonly protoRoot: Promise; /** * 加载proto文件 */ constructor() { this.protoRoot = new Promise(() => { // Protobuf.load('./proto/thj.proto', (err: Error, root: unknown) => { // if (err) { // reject(err) // } else { // resolve(root) // } // }) }) } /** * 创建proto实例 * @param protoName 需要实例化的proto构造函数 */ // eslint-disable-next-line build(protoName: string): Promise { return new Promise((resolve, reject) => { // eslint-disable-next-line this.protoRoot.then((root: any) => { const build = root.lookup(protoName); resolve(build); }).catch(() => { reject('proto文件加载失败'); }) }) } /** * proto请求编码 * @param protoName * @param payload * @returns */ async requestEncode(protoName: string, payload: T): Promise { const build = await $protoRoot.lookup(protoName); return build.encode(payload).finish(); } /** * proto响应解码 * @param protoName * @param content * @returns */ async responseDecode(protoName: string, content?: Uint8Array): Promise { const build = await $protoRoot.lookup(protoName); return build.decode(content); } })