Blame view

tools/protostostruct.go 2.95 KB
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
1
2
3
4
5
6
7
8
9
10
11
12
13
  package main
  
  import (
  	"bufio"
  	"bytes"
  	"fmt"
  	"io"
  	"io/ioutil"
  	"os"
  	"path"
  )
  
  var (
98b0736d   zhangqijia   添加定时器, 检查心跳
14
15
16
  	ProtoCode = "syntax = \"proto3\";\noption go_package = \"./pb;pb\";\n\npackage protocode;\n\nenum ProtoCode\n{\n  UNKNOWN = 0;\n %s\n}"
  	ProtoCodeLineReq = "\t%sReq = %d;\n"
  	ProtoCodeLineRsp = "\t%sRsp = %d;\n"
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
17
  
77f5eec7   zhangqijia   plugin 插件热更 接口
18
19
  	GoProtoCodeStr = "package main\n\nimport (\n\t\"pro2d/pb\"\n\t\"pro2d/utils/logger\"\n)\n\nfunc GetActionMap() map[interface{}]interface{} {\n\tlogger.Debug(\"init protocode...\")\n\tam := make(map[interface{}]interface{})\n%s\n\treturn am\n}"
  	GoProtoCodeLine = "\tam[pb.ProtoCode_%sReq] = %sRpc\n"
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
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
  )
  
  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 {
98b0736d   zhangqijia   添加定时器, 检查心跳
58
59
60
  			n1 := bytes.Index(v, []byte("Req"))
  			n2 := bytes.Index(v, []byte("Rsp"))
  			if n1  < 0 && n2 < 0 {
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
61
62
  				continue
  			}
98b0736d   zhangqijia   添加定时器, 检查心跳
63
64
65
66
67
68
69
70
71
  			if n1 >= 0 {
  				code++
  				protoData += fmt.Sprintf(ProtoCodeLineReq, v[:n1],code)
  				goProtoData += fmt.Sprintf(GoProtoCodeLine, v[:n1], v[:n1])
  			}
  			if n2 >= 0 {
  				code++
  				protoData += fmt.Sprintf(ProtoCodeLineRsp, v[:n2],code)
  			}
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
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
101
102
103
104
105
106
107
108
  		}
  	}
  
  	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)
  	}
  
77f5eec7   zhangqijia   plugin 插件热更 接口
109
  	fw, err = os.OpenFile( OutPath+"cmd/gameserver/plugin/protocode.go", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
110
111
112
113
114
115
116
117
118
119
120
  	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
  }