Blame view

tools/protostostruct.go 2.8 KB
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  package main
  
  import (
  	"bufio"
  	"bytes"
  	"fmt"
  	"io"
  	"io/ioutil"
  	"os"
  	"path"
  )
  
  var (
  	ProtoCode = "syntax = \"proto3\";\noption go_package = \"./pb;pb\";\n\npackage protocode;\n\nenum ProtoCode\n{\n  UNKNOWN = 0x000;\n %s\n}"
  	ProtoCodeLine = "\t%sRpc = %02x;\n"
  
5d9cf01c   zhangqijia   plugin 热更
17
  	GoProtoCodeStr = "package main\n\nimport (\n\t\"pro2d/protos/pb\"\n\t\"pro2d/src/components/logger\"\n\t\"pro2d/src/components/net\"\n)\n\nfunc LoadRpc()  {\n\tlogger.Debug(\"init protocode...\")\n\tnet.ActionMap = make(map[pb.ProtoCode]net.ActionHandler)\n%s\n}\n\nfunc init()  {\n\tLoadRpc()\n}"
c92a54a3   zhangqijia   循环引用的问题
18
  	GoProtoCodeLine = "\tnet.ActionMap[pb.ProtoCode_%sRpc] = %sRpc\n"
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  )
  
  func ProtoToCode(readPath, filename string) (string, string) {
  	protofile , err := os.Open(readPath+filename)
  	code := 0x000
  	protoData := ""
  	goProtoData := ""
  	if err != nil {
  		fmt.Errorf("ReadExcel|xlsx.OpenFile is err :%v", err)
  		return "", ""
  	}
  	defer protofile.Close()
  
  	r := bufio.NewReader(protofile)
  	for {
  		line, isPrefix, err := r.ReadLine()
  		if len(line) > 0 && err != nil {
  			fmt.Errorf("ReadLine returned both data and error: %s", err)
  			return "", ""
  
  		}
  		if isPrefix {
  			fmt.Errorf("ReadLine returned prefix")
  			return "", ""
  		}
  		if err != nil {
  			if err != io.EOF {
  				fmt.Errorf("Got unknown error: %s", err)
  				return "", ""
  			}
  			break
  		}
  		n := bytes.Index(line, []byte("message"))
  		if n < 0 {
  			continue
  		}
  		lb := bytes.Split(line, []byte(" "))
  		for _, v := range lb {
  			n = bytes.Index(v, []byte("Req"))
  			if n < 0 {
  				continue
  			}
  			code++
  			protoData += fmt.Sprintf(ProtoCodeLine, v[:n],code)
  			goProtoData += fmt.Sprintf(GoProtoCodeLine, v[:n], v[:n])
  		}
  	}
  
  	return protoData ,goProtoData
  }
  
  func ReadProtos(readPath, OutPath string ) error {
  	files, err := ioutil.ReadDir(readPath)
  	if err != nil {
  		return fmt.Errorf("ReadExcel|ReadDir is err:%v", err)
  	}
  
  
  	protoData, goProtoData := "", ""
  	for _, file := range files {
  		if path.Ext(file.Name()) != ".proto"{
  			continue
  		}
  		tprotoData, tgoProtoData := ProtoToCode(readPath, file.Name())
  		if tprotoData == "" || tgoProtoData == "" {
  		 	continue
  		}
  		protoData += tprotoData
  		goProtoData += tgoProtoData
  
  	}
  	fw, err := os.OpenFile( OutPath+"protos/protocode.proto", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
  	if err != nil {
  		return fmt.Errorf("WriteNewFile|OpenFile is err:%v", err)
  	}
  	defer fw.Close()
  
  	_, err = fw.Write([]byte(fmt.Sprintf(ProtoCode, protoData)))
  	if err != nil {
  		return fmt.Errorf("WriteNewFile|Write is err:%v", err)
  	}
  
5d9cf01c   zhangqijia   plugin 热更
101
  	fw, err = os.OpenFile( OutPath+"src/plugin/protocode.go", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
102
103
104
105
106
107
108
109
110
111
112
  	if err != nil {
  		return fmt.Errorf("WriteNewFile|OpenFile is err:%v", err)
  	}
  	defer fw.Close()
  
  	_, err = fw.Write([]byte(fmt.Sprintf(GoProtoCodeStr, goProtoData)))
  	if err != nil {
  		return fmt.Errorf("WriteNewFile|Write is err:%v", err)
  	}
  	return nil
  }