From 14346982c84dd7cf65fb42d4d11a46e83e47e711 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 11 Aug 2023 14:31:08 +0800 Subject: [PATCH] 1 --- tools/pbtools/app.js | 106 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 102 insertions(+), 4 deletions(-) diff --git a/tools/pbtools/app.js b/tools/pbtools/app.js index b65b4517..277f420e 100644 --- a/tools/pbtools/app.js +++ b/tools/pbtools/app.js @@ -1,9 +1,6 @@ const protobuf = require('protobufjs'); const parseArgs = require('minimist'); - -function prettyJsonEncode(obj) { - return JSON.stringify(obj, "", " "); -} +const fs = require('fs'); class PBTools { @@ -60,8 +57,109 @@ class PBTools { } ); } + await this.genCsAutoGen(); } + async genCsAutoGen() { + let data = `package cs + +import ( + "f5" + proto "github.com/golang/protobuf/proto" +) + +type MsgHandler interface { + CMPing(*f5.MsgHdr, *CMPing) + CMLogin(*f5.MsgHdr, *CMLogin) + CMReconnect(*f5.MsgHdr, *CMReconnect) +} + +type NetMsgHandler struct { + MsgId int + HandlerId int + parseCb func([]byte) interface{} + cb func(*f5.MsgHdr, MsgHandler) +} + +var handlers [2000]*NetMsgHandler + +func GetNetMsgHandler(msgId uint16) *NetMsgHandler { + handler := handlers[msgId] + return handler +} + +func DispatchMsg(handler *NetMsgHandler, hdr *f5.MsgHdr, msgHandler MsgHandler) { + handler.cb(hdr, msgHandler) +} + +func RegHandlerId(msgId int, handlerId int) { + handler := handlers[msgId] + handler.HandlerId = handlerId +} + +func ParsePb(msgId uint16, data []byte) interface{} { + handler := handlers[msgId] + if handler == nil { + return nil + } + return handler.parseCb(data) +} + +`; + this.csProtoPb.nested.cs.nestedArray.forEach( + (item) => { + if (item.name[0] == 'C' && + item.name[1] == 'M') { + data += ` +func (this *MsgHandlerImpl) ${item.name}(hdr *f5.MsgHdr, msg *${item.name}) { +} +`; + } + }); + this.csProtoPb.nested.cs.nestedArray.forEach( + (item) => { + if (item.name[0] == 'C' && + item.name[1] == 'M') { + data += ` +func (this *${item.name}) GetNetMsgId() uint16 { + return uint16(CMMessageIdE__${item.name}) +} +`; + } else if (item.name[0] == 'S' && + item.name[1] == 'M') { + data += ` +func (this *${item.name}) GetNetMsgId() uint16 { + return uint16(SMMessageIdE__${item.name}) +} +`; + } + }); + data += ` +func init() { +`; + this.csProtoPb.nested.cs.nestedArray.forEach( + (item) => { + if (item.name[0] == 'C' && + item.name[1] == 'M') { + data += ` + handlers[int(CMMessageIdE__${item.name})] = &NetMsgHandler{ + MsgId: int(CMMessageIdE__${item.name}), + parseCb: func (data []byte) interface{} { + msg := ${item.name}{} + proto.Unmarshal(data, msg) + return msg + }, + cb: func (hdr *f5.MsgHdr, handler MsgHandler) { + handler.${item.name}(hdr, hdr.Msg.(*CMPing)) + }, + } +`; + } + }); + data += ` +}`; + fs.writeFileSync('./cs/cs.auto_gen.go', data); + } } (new PBTools).init();