generator.py
2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import os
ProtoCodeGO = './cmd/gameserver/action/protocode.go'
ProtoCodeFile = './protos/protocode.proto'
ProtoFileDir = "./protos"
ProtoCodeStr = "syntax = \"proto3\";\noption go_package = \"../pb;pb\";\n\npackage protocode;\n\nenum ProtoCode\n{{\n " \
"UNKNOWN = 0;\n {}\n}} "
ProtoCodeLineReq = "\t{}Req = {};\n"
ProtoCodeLineRsp = "\t{}Rsp = {};\n"
GoProtoCodeStr = "package action\n\nimport (\n\t\"pro2d/common/logger\"\n\t\"pro2d/pb\"\n)\n\nfunc GetActionMap() " \
"map[interface{{}}]interface{{}} {{\n\tlogger.Debug(\"init protocode...\")\n\tam := make(map[interface{{" \
"}}]interface{{}})\n{}\n\treturn am\n}}"
GoProtoCodeLine = "\tam[uint32(pb.ProtoCode_{}Req)] = {}Rpc\n"
def generatorProto(path):
files = os.listdir(path)
code = 0
ProtoCodeData = ""
GoCodeData = ""
for file in files:
if os.path.isdir(file):
continue
with open(path + "/" + file, 'r', encoding='utf-8', errors='ignore') as f:
lines = f.readlines() # 读取所有行
firstline = lines[0]
if firstline.find("proto3") == -1:
continue
for line in lines:
if line.find("message") == -1:
continue
sline = line.split(' ')
if len(sline) < 2:
continue
messageStr = sline[1].replace('\n', '').replace('{', "")
n1 = messageStr.find('Req')
n2 = messageStr.find('Rsp')
loginReq = messageStr.find('LoginReq')
if n1 != -1:
code += 1
ProtoCodeData += ProtoCodeLineReq.format(messageStr[:n1], code)
if loginReq != -1:
continue
GoCodeData += GoProtoCodeLine.format(messageStr[:n1], messageStr[:n1])
elif n2 != -1:
code += 1
ProtoCodeData += ProtoCodeLineRsp.format(messageStr[:n2], code)
# protocode.go
gostr = GoProtoCodeStr.format(GoCodeData)
fo = open(ProtoCodeGO, "w")
fo.write(gostr)
fo.close()
#protocode.proto
protostr = ProtoCodeStr.format(ProtoCodeData)
fo = open(ProtoCodeFile, "w")
fo.write(protostr)
fo.close()
if __name__ == "__main__":
generatorProto(ProtoFileDir)