Blame view

tools/generator.py 3.2 KB
d500811b   zhangqijia   feat: 使用python3 自...
1
2
3
  import os
  
  ProtoCodeGO = './cmd/gameserver/action/protocode.go'
2ea16684   zhangqijia   fix: update
4
  ProtoCodeGOTest = './cmd/test/action/protocode.go'
d500811b   zhangqijia   feat: 使用python3 自...
5
6
7
8
9
10
11
12
13
14
15
16
17
  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"
  
2ea16684   zhangqijia   fix: update
18
19
20
21
22
  GoProtoCodeTestStr = "package action\n\nimport (\n\t\"pro2d/pb\"\n)\n\nfunc GetTestActionMap() " \
                   "map[interface{{}}]interface{{}} {{\n\tam := make(map[interface{{" \
                   "}}]interface{{}})\n{}\n\treturn am\n}}"
  GoProtoCodeTestReqLine = "\tam[uint32(pb.ProtoCode_{}Req)] = {}Rsp\n"
  GoProtoCodeTestRspLine = "\tam[uint32(pb.ProtoCode_{}Rsp)] = {}Rsp\n"
d500811b   zhangqijia   feat: 使用python3 自...
23
24
25
26
27
28
  
  def generatorProto(path):
      files = os.listdir(path)
      code = 0
      ProtoCodeData = ""
      GoCodeData = ""
2ea16684   zhangqijia   fix: update
29
      GoCodeTestData = ""
d500811b   zhangqijia   feat: 使用python3 自...
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
      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')
3e92be67   zhangqijia   fix: 优化协议,除了登录和创建...
51
52
53
                  loginReq = messageStr.find('LoginReq')
  
  
d500811b   zhangqijia   feat: 使用python3 自...
54
55
56
57
  
                  if n1 != -1:
                      code += 1
                      ProtoCodeData += ProtoCodeLineReq.format(messageStr[:n1], code)
3e92be67   zhangqijia   fix: 优化协议,除了登录和创建...
58
59
60
61
  
                      if loginReq != -1:
                          continue
  
d500811b   zhangqijia   feat: 使用python3 自...
62
                      GoCodeData += GoProtoCodeLine.format(messageStr[:n1], messageStr[:n1])
2ea16684   zhangqijia   fix: update
63
                      GoCodeTestData += GoProtoCodeTestReqLine.format(messageStr[:n1], messageStr[:n1])
d500811b   zhangqijia   feat: 使用python3 自...
64
65
66
67
                  elif n2 != -1:
                      code += 1
                      ProtoCodeData += ProtoCodeLineRsp.format(messageStr[:n2], code)
  
2ea16684   zhangqijia   fix: update
68
69
70
71
                      if loginReq != -1:
                          continue
                      GoCodeTestData += GoProtoCodeTestRspLine.format(messageStr[:n2], messageStr[:n2])
  
d500811b   zhangqijia   feat: 使用python3 自...
72
73
74
75
76
77
      # protocode.go
      gostr = GoProtoCodeStr.format(GoCodeData)
      fo = open(ProtoCodeGO, "w")
      fo.write(gostr)
      fo.close()
  
2ea16684   zhangqijia   fix: update
78
79
80
81
82
83
      # protocode.go
      gostr = GoProtoCodeTestStr.format(GoCodeTestData)
      fo = open(ProtoCodeGOTest, "w")
      fo.write(gostr)
      fo.close()
  
d500811b   zhangqijia   feat: 使用python3 自...
84
85
86
87
88
89
90
91
92
      #protocode.proto
      protostr = ProtoCodeStr.format(ProtoCodeData)
      fo = open(ProtoCodeFile, "w")
      fo.write(protostr)
      fo.close()
  
  
  if __name__ == "__main__":
      generatorProto(ProtoFileDir)