Blame view

tools/protostostruct.go 2.69 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"
  
c92a54a3   zhangqijia   循环引用的问题
17
18
  	GoProtoCodeStr = "package actions\n\nimport (\n\t\"pro2d/components/net\"\n\t\"pro2d/protos/pb\"\n)\n\nfunc init()  {\n\tnet.ActionMap = make(map[pb.ProtoCode]net.ActionHandler)\n\n%s\n}"
  	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)
  	}
  
c92a54a3   zhangqijia   循环引用的问题
101
  	fw, err = os.OpenFile( OutPath+"actions/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
  }