index.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //import Protobuf from 'protobufjs'
  2. const $protoRoot = require('./thj.js')
  3. export default new (class {
  4. private readonly protoRoot: Promise<unknown>;
  5. /**
  6. * 加载proto文件
  7. */
  8. constructor() {
  9. this.protoRoot = new Promise(() => {
  10. // Protobuf.load('./proto/thj.proto', (err: Error, root: unknown) => {
  11. // if (err) {
  12. // reject(err)
  13. // } else {
  14. // resolve(root)
  15. // }
  16. // })
  17. })
  18. }
  19. /**
  20. * 创建proto实例
  21. * @param protoName 需要实例化的proto构造函数
  22. */
  23. // eslint-disable-next-line
  24. build(protoName: string): Promise<any> {
  25. return new Promise((resolve, reject) => {
  26. // eslint-disable-next-line
  27. this.protoRoot.then((root: any) => {
  28. const build = root.lookup(protoName);
  29. resolve(build);
  30. }).catch(() => {
  31. reject('proto文件加载失败');
  32. })
  33. })
  34. }
  35. /**
  36. * proto请求编码
  37. * @param protoName
  38. * @param payload
  39. * @returns
  40. */
  41. async requestEncode<T>(protoName: string, payload: T): Promise<Uint8Array> {
  42. const build = await $protoRoot.lookup(protoName);
  43. return build.encode(payload).finish();
  44. }
  45. /**
  46. * proto响应解码
  47. * @param protoName
  48. * @param content
  49. * @returns
  50. */
  51. async responseDecode<T>(protoName: string, content?: Uint8Array): Promise<T> {
  52. const build = await $protoRoot.lookup(protoName);
  53. return build.decode(content);
  54. }
  55. })