Commit 69d286a7c94629a66d3065140ade7d58ae77166b
1 parent
cd2f96ab
fix: 插件用来做部分热更
1. 调整逻辑代码位置 2. 插件里做部分逻辑热更
Showing
11 changed files
with
161 additions
and
44 deletions
Show diff stats
Makefile
@@ -11,7 +11,7 @@ test: | @@ -11,7 +11,7 @@ test: | ||
11 | http: | 11 | http: |
12 | go run -race cmd/httpserver/http.go cmd/httpserver/AccountAction.go | 12 | go run -race cmd/httpserver/http.go cmd/httpserver/AccountAction.go |
13 | 13 | ||
14 | -game:plugin | 14 | +game: |
15 | go run -race cmd/gameserver/*.go | 15 | go run -race cmd/gameserver/*.go |
16 | build: | 16 | build: |
17 | go build -race -o bin/account cmd/http.go | 17 | go build -race -o bin/account cmd/http.go |
cmd/gameserver/plugin/RolePlugin.go renamed to cmd/gameserver/action/RoleAction.go
1 | -package main | 1 | +package action |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "github.com/golang/protobuf/proto" | 4 | "github.com/golang/protobuf/proto" |
@@ -9,12 +9,12 @@ import ( | @@ -9,12 +9,12 @@ import ( | ||
9 | "pro2d/pb" | 9 | "pro2d/pb" |
10 | ) | 10 | ) |
11 | 11 | ||
12 | -func HeartRpc(msg components.IMessage) (int32, interface{}) { | 12 | +func HeartRpc(msg components.IMessage) (int32, interface{}) { |
13 | //msg.Conn.SetLastHeartCheckTime() | 13 | //msg.Conn.SetLastHeartCheckTime() |
14 | return 0, nil | 14 | return 0, nil |
15 | } | 15 | } |
16 | 16 | ||
17 | -func CreateRpc(msg components.IMessage) (int32, interface{}) { | 17 | +func CreateRpc(msg components.IMessage) (int32, interface{}) { |
18 | req := pb.CreateReq{} | 18 | req := pb.CreateReq{} |
19 | if err := proto.Unmarshal(msg.GetData(), &req); err != nil { | 19 | if err := proto.Unmarshal(msg.GetData(), &req); err != nil { |
20 | logger.Error("CreateRpc err: %v", err) | 20 | logger.Error("CreateRpc err: %v", err) |
@@ -27,14 +27,14 @@ func CreateRpc(msg components.IMessage) (int32, interface{}) { | @@ -27,14 +27,14 @@ func CreateRpc(msg components.IMessage) (int32, interface{}) { | ||
27 | 27 | ||
28 | roleId := common.SnowFlack.NextValStr() | 28 | roleId := common.SnowFlack.NextValStr() |
29 | role = models.NewRole(roleId) | 29 | role = models.NewRole(roleId) |
30 | - if err := role.Create(); err != nil { | 30 | + if err := role.Create(); err != nil { |
31 | logger.Error("CreateRpc role create err: %v", err) | 31 | logger.Error("CreateRpc role create err: %v", err) |
32 | return 3, nil | 32 | return 3, nil |
33 | } | 33 | } |
34 | return 0, nil | 34 | return 0, nil |
35 | } | 35 | } |
36 | 36 | ||
37 | -func LoginRpc(msg components.IMessage) (int32, interface{}) { | 37 | +func LoginRpc(msg components.IMessage) (int32, interface{}) { |
38 | //logger.Debug("11111111cmd: %v, msg: %s", msg.GetHeader().GetMsgID(), msg.GetData()) | 38 | //logger.Debug("11111111cmd: %v, msg: %s", msg.GetHeader().GetMsgID(), msg.GetData()) |
39 | req := pb.LoginReq{} | 39 | req := pb.LoginReq{} |
40 | if err := proto.Unmarshal(msg.GetData(), &req); err != nil { | 40 | if err := proto.Unmarshal(msg.GetData(), &req); err != nil { |
@@ -49,9 +49,9 @@ func LoginRpc(msg components.IMessage) (int32, interface{}) { | @@ -49,9 +49,9 @@ func LoginRpc(msg components.IMessage) (int32, interface{}) { | ||
49 | role.SetProperty("Device", req.Device) | 49 | role.SetProperty("Device", req.Device) |
50 | 50 | ||
51 | return 0, &pb.RoleRsp{ | 51 | return 0, &pb.RoleRsp{ |
52 | - Role: role.Role, | ||
53 | - Hero: role.GetAllHero(), | ||
54 | - Team: role.Teams.Team, | 52 | + Role: role.Role, |
53 | + Hero: role.GetAllHero(), | ||
54 | + Team: role.Teams.Team, | ||
55 | Equips: []*pb.Equipment{role.Equip.Equip}, | 55 | Equips: []*pb.Equipment{role.Equip.Equip}, |
56 | } | 56 | } |
57 | -} | ||
58 | \ No newline at end of file | 57 | \ No newline at end of file |
58 | +} |
cmd/gameserver/plugin/protocode.go renamed to cmd/gameserver/action/protocode.go
1 | -package main | 1 | +package action |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "pro2d/common/logger" | 4 | "pro2d/common/logger" |
@@ -8,9 +8,9 @@ import ( | @@ -8,9 +8,9 @@ import ( | ||
8 | func GetActionMap() map[interface{}]interface{} { | 8 | func GetActionMap() map[interface{}]interface{} { |
9 | logger.Debug("init protocode...") | 9 | logger.Debug("init protocode...") |
10 | am := make(map[interface{}]interface{}) | 10 | am := make(map[interface{}]interface{}) |
11 | - am[pb.ProtoCode_HeartReq] = HeartRpc | ||
12 | - am[pb.ProtoCode_LoginReq] = LoginRpc | ||
13 | - am[pb.ProtoCode_CreateReq] = CreateRpc | 11 | + am[uint32(pb.ProtoCode_HeartReq)] = HeartRpc |
12 | + am[uint32(pb.ProtoCode_LoginReq)] = LoginRpc | ||
13 | + am[uint32(pb.ProtoCode_CreateReq)] = CreateRpc | ||
14 | 14 | ||
15 | return am | 15 | return am |
16 | -} | ||
17 | \ No newline at end of file | 16 | \ No newline at end of file |
17 | +} |
cmd/gameserver/game.go
@@ -3,6 +3,7 @@ package main | @@ -3,6 +3,7 @@ package main | ||
3 | import ( | 3 | import ( |
4 | "fmt" | 4 | "fmt" |
5 | _ "net/http/pprof" | 5 | _ "net/http/pprof" |
6 | + "pro2d/cmd/gameserver/action" | ||
6 | "pro2d/common" | 7 | "pro2d/common" |
7 | "pro2d/common/components" | 8 | "pro2d/common/components" |
8 | "pro2d/common/db" | 9 | "pro2d/common/db" |
@@ -29,6 +30,7 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { | @@ -29,6 +30,7 @@ func NewGameServer(sconf *common.SConf) (*GameServer, error) { | ||
29 | } | 30 | } |
30 | 31 | ||
31 | iserver := components.NewServer(sconf.Port, options...) | 32 | iserver := components.NewServer(sconf.Port, options...) |
33 | + iserver.SetActions(action.GetActionMap()) | ||
32 | s.IServer = iserver | 34 | s.IServer = iserver |
33 | 35 | ||
34 | //mgo init | 36 | //mgo init |
@@ -0,0 +1,43 @@ | @@ -0,0 +1,43 @@ | ||
1 | +package main | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/golang/protobuf/proto" | ||
5 | + "pro2d/common/components" | ||
6 | + "pro2d/common/logger" | ||
7 | + "pro2d/models" | ||
8 | + "pro2d/pb" | ||
9 | +) | ||
10 | + | ||
11 | +func init() { | ||
12 | + logger.Debug("init game server plugin") | ||
13 | +} | ||
14 | + | ||
15 | +func GetActionMap() map[interface{}]interface{} { | ||
16 | + logger.Debug("init protocode...") | ||
17 | + am := make(map[interface{}]interface{}) | ||
18 | + am[uint32(pb.ProtoCode_LoginReq)] = LoginRpc | ||
19 | + | ||
20 | + return am | ||
21 | +} | ||
22 | + | ||
23 | +func LoginRpc(msg components.IMessage) (int32, interface{}) { | ||
24 | + //logger.Debug("11111111cmd: %v, msg: %s", msg.GetHeader().GetMsgID(), msg.GetData()) | ||
25 | + req := pb.LoginReq{} | ||
26 | + if err := proto.Unmarshal(msg.GetData(), &req); err != nil { | ||
27 | + logger.Error("loginRpc err: %v", err) | ||
28 | + return 1, nil | ||
29 | + } | ||
30 | + | ||
31 | + role := models.RoleExistByUid(req.Uid) | ||
32 | + if role == nil { | ||
33 | + return 2, nil | ||
34 | + } | ||
35 | + role.SetProperty("Device", req.Device) | ||
36 | + | ||
37 | + return 0, &pb.RoleRsp{ | ||
38 | + Role: role.Role, | ||
39 | + Hero: role.GetAllHero(), | ||
40 | + Team: role.Teams.Team, | ||
41 | + Equips: []*pb.Equipment{role.Equip.Equip}, | ||
42 | + } | ||
43 | +} |
@@ -0,0 +1,55 @@ | @@ -0,0 +1,55 @@ | ||
1 | +package components | ||
2 | + | ||
3 | +import "sync" | ||
4 | + | ||
5 | +type ConnManage struct { | ||
6 | + mu sync.RWMutex | ||
7 | + conns map[int]IConnection | ||
8 | +} | ||
9 | + | ||
10 | +func NewConnManage() *ConnManage { | ||
11 | + return &ConnManage{ | ||
12 | + mu: sync.RWMutex{}, | ||
13 | + conns: make(map[int]IConnection), | ||
14 | + } | ||
15 | +} | ||
16 | + | ||
17 | +func (c *ConnManage) AddConn(id int, connection IConnection) { | ||
18 | + c.mu.Lock() | ||
19 | + defer c.mu.Unlock() | ||
20 | + c.conns[id] = connection | ||
21 | +} | ||
22 | + | ||
23 | +func (c *ConnManage) GetConn(id int) IConnection { | ||
24 | + c.mu.RLock() | ||
25 | + defer c.mu.RUnlock() | ||
26 | + return c.conns[id] | ||
27 | +} | ||
28 | + | ||
29 | +func (c *ConnManage) DelConn(id int) IConnection { | ||
30 | + c.mu.Lock() | ||
31 | + defer c.mu.Unlock() | ||
32 | + conn := c.conns[id] | ||
33 | + delete(c.conns, id) | ||
34 | + return conn | ||
35 | +} | ||
36 | + | ||
37 | +func (c *ConnManage) Range(f func(key interface{}, value interface{}) bool) { | ||
38 | + for k, v := range c.conns { | ||
39 | + c.mu.Lock() | ||
40 | + if ok := f(k, v); !ok { | ||
41 | + c.mu.Unlock() | ||
42 | + return | ||
43 | + } | ||
44 | + c.mu.Unlock() | ||
45 | + | ||
46 | + } | ||
47 | +} | ||
48 | + | ||
49 | +func (c *ConnManage) StopAllConns() { | ||
50 | + c.Range(func(key interface{}, value interface{}) bool { | ||
51 | + conn := value.(IConnection) | ||
52 | + conn.Stop() | ||
53 | + return true | ||
54 | + }) | ||
55 | +} |
common/components/icompontents.go
@@ -62,6 +62,7 @@ type ( | @@ -62,6 +62,7 @@ type ( | ||
62 | GetSplitter() ISplitter | 62 | GetSplitter() ISplitter |
63 | GetPlugin() IPlugin | 63 | GetPlugin() IPlugin |
64 | GetAction(uint32) interface{} | 64 | GetAction(uint32) interface{} |
65 | + SetActions(map[interface{}]interface{}) | ||
65 | GetConnManage() IConnManage | 66 | GetConnManage() IConnManage |
66 | 67 | ||
67 | SetConnectionCallback(ConnectionCallback) | 68 | SetConnectionCallback(ConnectionCallback) |
@@ -76,7 +77,7 @@ type ( | @@ -76,7 +77,7 @@ type ( | ||
76 | Stop() | 77 | Stop() |
77 | BindHandler(interface{}) | 78 | BindHandler(interface{}) |
78 | } | 79 | } |
79 | - ActionHandler func(conn IConnection, msg IMessage) (int32, interface{}) | 80 | + ActionHandler func(msg IMessage) (int32, interface{}) |
80 | //用于热更逻辑的插件接口 | 81 | //用于热更逻辑的插件接口 |
81 | IPlugin interface { | 82 | IPlugin interface { |
82 | LoadPlugin() error | 83 | LoadPlugin() error |
common/components/plugin.go
@@ -3,23 +3,24 @@ package components | @@ -3,23 +3,24 @@ package components | ||
3 | import ( | 3 | import ( |
4 | "plugin" | 4 | "plugin" |
5 | "pro2d/common/logger" | 5 | "pro2d/common/logger" |
6 | - "pro2d/pb" | ||
7 | "sync" | 6 | "sync" |
8 | ) | 7 | ) |
9 | 8 | ||
10 | -type ActionMap sync.Map//map[pb.ProtoCode]ActionHandler | ||
11 | - | ||
12 | type PluginOption func(*Plugin) | 9 | type PluginOption func(*Plugin) |
13 | 10 | ||
14 | type Plugin struct { | 11 | type Plugin struct { |
15 | pluginPath string | 12 | pluginPath string |
16 | 13 | ||
17 | - Actions sync.Map | 14 | + Actions sync.Map |
18 | } | 15 | } |
19 | 16 | ||
20 | -func NewPlugin(path string, options ...PluginOption) IPlugin{ | 17 | +func NewPlugin(path string, options ...PluginOption) IPlugin { |
18 | + if path == "" { | ||
19 | + return nil | ||
20 | + } | ||
21 | p := &Plugin{ | 21 | p := &Plugin{ |
22 | pluginPath: path, | 22 | pluginPath: path, |
23 | + Actions: sync.Map{}, | ||
23 | } | 24 | } |
24 | for _, option := range options { | 25 | for _, option := range options { |
25 | option(p) | 26 | option(p) |
@@ -41,7 +42,7 @@ func (p *Plugin) LoadPlugin() error { | @@ -41,7 +42,7 @@ func (p *Plugin) LoadPlugin() error { | ||
41 | } | 42 | } |
42 | logger.Debug("func LoadPlugin Lookup success...") | 43 | logger.Debug("func LoadPlugin Lookup success...") |
43 | 44 | ||
44 | - if x, ok := f.(func()map[interface{}]interface{}); ok { | 45 | + if x, ok := f.(func() map[interface{}]interface{}); ok { |
45 | logger.Debug("func LoadPlugin GetActionMap success...") | 46 | logger.Debug("func LoadPlugin GetActionMap success...") |
46 | p.SetActions(x()) | 47 | p.SetActions(x()) |
47 | } | 48 | } |
@@ -50,7 +51,7 @@ func (p *Plugin) LoadPlugin() error { | @@ -50,7 +51,7 @@ func (p *Plugin) LoadPlugin() error { | ||
50 | } | 51 | } |
51 | 52 | ||
52 | func (p *Plugin) GetAction(cmd uint32) interface{} { | 53 | func (p *Plugin) GetAction(cmd uint32) interface{} { |
53 | - f, ok := p.Actions.Load(pb.ProtoCode(cmd)) | 54 | + f, ok := p.Actions.Load(cmd) |
54 | if !ok { | 55 | if !ok { |
55 | return nil | 56 | return nil |
56 | } | 57 | } |
@@ -59,7 +60,7 @@ func (p *Plugin) GetAction(cmd uint32) interface{} { | @@ -59,7 +60,7 @@ func (p *Plugin) GetAction(cmd uint32) interface{} { | ||
59 | 60 | ||
60 | func (p *Plugin) SetActions(am map[interface{}]interface{}) { | 61 | func (p *Plugin) SetActions(am map[interface{}]interface{}) { |
61 | for k, v := range am { | 62 | for k, v := range am { |
62 | - cmd := k.(pb.ProtoCode) | 63 | + cmd := k.(uint32) |
63 | p.Actions.Delete(cmd) | 64 | p.Actions.Delete(cmd) |
64 | p.Actions.Store(cmd, v) | 65 | p.Actions.Store(cmd, v) |
65 | } | 66 | } |
common/components/server.go
@@ -55,7 +55,8 @@ type Server struct { | @@ -55,7 +55,8 @@ type Server struct { | ||
55 | timerCallback TimerCallback | 55 | timerCallback TimerCallback |
56 | 56 | ||
57 | port int | 57 | port int |
58 | - connManage *ConnManage | 58 | + connManage IConnManage |
59 | + Actions map[interface{}]interface{} | ||
59 | } | 60 | } |
60 | 61 | ||
61 | func NewServer(port int, options ...ServerOption) IServer { | 62 | func NewServer(port int, options ...ServerOption) IServer { |
@@ -79,7 +80,18 @@ func (s *Server) GetPlugin() IPlugin { | @@ -79,7 +80,18 @@ func (s *Server) GetPlugin() IPlugin { | ||
79 | } | 80 | } |
80 | 81 | ||
81 | func (s *Server) GetAction(cmd uint32) interface{} { | 82 | func (s *Server) GetAction(cmd uint32) interface{} { |
82 | - return s.plugins.GetAction(cmd) | 83 | + if s.plugins != nil { |
84 | + f := s.plugins.GetAction(cmd) | ||
85 | + if f != nil { | ||
86 | + return f | ||
87 | + } | ||
88 | + } | ||
89 | + | ||
90 | + return s.Actions[cmd] | ||
91 | +} | ||
92 | + | ||
93 | +func (s *Server) SetActions(mi map[interface{}]interface{}) { | ||
94 | + s.Actions = mi | ||
83 | } | 95 | } |
84 | 96 | ||
85 | func (s *Server) GetConnManage() IConnManage { | 97 | func (s *Server) GetConnManage() IConnManage { |
@@ -103,8 +115,10 @@ func (s *Server) SetTimerCallback(cb TimerCallback) { | @@ -103,8 +115,10 @@ func (s *Server) SetTimerCallback(cb TimerCallback) { | ||
103 | } | 115 | } |
104 | 116 | ||
105 | func (s *Server) Start() error { | 117 | func (s *Server) Start() error { |
106 | - if err := s.plugins.LoadPlugin(); err != nil { | ||
107 | - return err | 118 | + if s.plugins != nil { |
119 | + if err := s.plugins.LoadPlugin(); err != nil { | ||
120 | + return err | ||
121 | + } | ||
108 | } | 122 | } |
109 | 123 | ||
110 | port := fmt.Sprintf(":%d", s.port) | 124 | port := fmt.Sprintf(":%d", s.port) |
conf/conf.yaml
@@ -22,7 +22,7 @@ server_account: | @@ -22,7 +22,7 @@ server_account: | ||
22 | ip: "192.168.0.206" | 22 | ip: "192.168.0.206" |
23 | port: 8858 | 23 | port: 8858 |
24 | pool_size: 1 | 24 | pool_size: 1 |
25 | - debugport: 6061 | 25 | + debugport: 6062 |
26 | mongo: | 26 | mongo: |
27 | <<: *default-mongo | 27 | <<: *default-mongo |
28 | dbname: "account" | 28 | dbname: "account" |
@@ -33,7 +33,8 @@ server_game: | @@ -33,7 +33,8 @@ server_game: | ||
33 | ip: "192.168.0.206" | 33 | ip: "192.168.0.206" |
34 | port: 8850 | 34 | port: 8850 |
35 | pool_size: 1 | 35 | pool_size: 1 |
36 | - plugin_path: "./bin/plugin.so" | 36 | + debugport: 6061 |
37 | + # plugin_path: "./bin/plugin.so" | ||
37 | mongo: | 38 | mongo: |
38 | <<: *default-mongo | 39 | <<: *default-mongo |
39 | dbname: "game" | 40 | dbname: "game" |
tools/protostostruct.go
@@ -11,16 +11,17 @@ import ( | @@ -11,16 +11,17 @@ import ( | ||
11 | ) | 11 | ) |
12 | 12 | ||
13 | var ( | 13 | var ( |
14 | - ProtoCode = "syntax = \"proto3\";\noption go_package = \"./pb;pb\";\n\npackage protocode;\n\nenum ProtoCode\n{\n UNKNOWN = 0;\n %s\n}" | 14 | + ProtoCode = "syntax = \"proto3\";\noption go_package = \"../pb;pb\";\n\npackage protocode;\n\nenum ProtoCode\n{\n UNKNOWN = 0;\n %s\n}" |
15 | ProtoCodeLineReq = "\t%sReq = %d;\n" | 15 | ProtoCodeLineReq = "\t%sReq = %d;\n" |
16 | ProtoCodeLineRsp = "\t%sRsp = %d;\n" | 16 | ProtoCodeLineRsp = "\t%sRsp = %d;\n" |
17 | 17 | ||
18 | - 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}" | ||
19 | - GoProtoCodeLine = "\tam[pb.ProtoCode_%sReq] = %sRpc\n" | 18 | + 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%s\n\treturn am\n}" |
19 | + | ||
20 | + GoProtoCodeLine = "\tam[uint32(pb.ProtoCode_%sReq)] = %sRpc\n" | ||
20 | ) | 21 | ) |
21 | 22 | ||
22 | func ProtoToCode(readPath, filename string) (string, string) { | 23 | func ProtoToCode(readPath, filename string) (string, string) { |
23 | - protofile , err := os.Open(readPath+filename) | 24 | + protofile, err := os.Open(readPath + filename) |
24 | code := 0x000 | 25 | code := 0x000 |
25 | protoData := "" | 26 | protoData := "" |
26 | goProtoData := "" | 27 | goProtoData := "" |
@@ -57,45 +58,44 @@ func ProtoToCode(readPath, filename string) (string, string) { | @@ -57,45 +58,44 @@ func ProtoToCode(readPath, filename string) (string, string) { | ||
57 | for _, v := range lb { | 58 | for _, v := range lb { |
58 | n1 := bytes.Index(v, []byte("Req")) | 59 | n1 := bytes.Index(v, []byte("Req")) |
59 | n2 := bytes.Index(v, []byte("Rsp")) | 60 | n2 := bytes.Index(v, []byte("Rsp")) |
60 | - if n1 < 0 && n2 < 0 { | 61 | + if n1 < 0 && n2 < 0 { |
61 | continue | 62 | continue |
62 | } | 63 | } |
63 | if n1 >= 0 { | 64 | if n1 >= 0 { |
64 | code++ | 65 | code++ |
65 | - protoData += fmt.Sprintf(ProtoCodeLineReq, v[:n1],code) | 66 | + protoData += fmt.Sprintf(ProtoCodeLineReq, v[:n1], code) |
66 | goProtoData += fmt.Sprintf(GoProtoCodeLine, v[:n1], v[:n1]) | 67 | goProtoData += fmt.Sprintf(GoProtoCodeLine, v[:n1], v[:n1]) |
67 | } | 68 | } |
68 | if n2 >= 0 { | 69 | if n2 >= 0 { |
69 | code++ | 70 | code++ |
70 | - protoData += fmt.Sprintf(ProtoCodeLineRsp, v[:n2],code) | 71 | + protoData += fmt.Sprintf(ProtoCodeLineRsp, v[:n2], code) |
71 | } | 72 | } |
72 | } | 73 | } |
73 | } | 74 | } |
74 | 75 | ||
75 | - return protoData ,goProtoData | 76 | + return protoData, goProtoData |
76 | } | 77 | } |
77 | 78 | ||
78 | -func ReadProtos(readPath, OutPath string ) error { | 79 | +func ReadProtos(readPath, OutPath string) error { |
79 | files, err := ioutil.ReadDir(readPath) | 80 | files, err := ioutil.ReadDir(readPath) |
80 | if err != nil { | 81 | if err != nil { |
81 | return fmt.Errorf("ReadExcel|ReadDir is err:%v", err) | 82 | return fmt.Errorf("ReadExcel|ReadDir is err:%v", err) |
82 | } | 83 | } |
83 | 84 | ||
84 | - | ||
85 | protoData, goProtoData := "", "" | 85 | protoData, goProtoData := "", "" |
86 | for _, file := range files { | 86 | for _, file := range files { |
87 | - if path.Ext(file.Name()) != ".proto"{ | 87 | + if path.Ext(file.Name()) != ".proto" { |
88 | continue | 88 | continue |
89 | } | 89 | } |
90 | tprotoData, tgoProtoData := ProtoToCode(readPath, file.Name()) | 90 | tprotoData, tgoProtoData := ProtoToCode(readPath, file.Name()) |
91 | if tprotoData == "" || tgoProtoData == "" { | 91 | if tprotoData == "" || tgoProtoData == "" { |
92 | - continue | 92 | + continue |
93 | } | 93 | } |
94 | protoData += tprotoData | 94 | protoData += tprotoData |
95 | goProtoData += tgoProtoData | 95 | goProtoData += tgoProtoData |
96 | 96 | ||
97 | } | 97 | } |
98 | - fw, err := os.OpenFile( OutPath+"protos/protocode.proto", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) | 98 | + fw, err := os.OpenFile(OutPath+"protos/protocode.proto", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) |
99 | if err != nil { | 99 | if err != nil { |
100 | return fmt.Errorf("WriteNewFile|OpenFile is err:%v", err) | 100 | return fmt.Errorf("WriteNewFile|OpenFile is err:%v", err) |
101 | } | 101 | } |
@@ -106,7 +106,7 @@ func ReadProtos(readPath, OutPath string ) error { | @@ -106,7 +106,7 @@ func ReadProtos(readPath, OutPath string ) error { | ||
106 | return fmt.Errorf("WriteNewFile|Write is err:%v", err) | 106 | return fmt.Errorf("WriteNewFile|Write is err:%v", err) |
107 | } | 107 | } |
108 | 108 | ||
109 | - fw, err = os.OpenFile( OutPath+"cmd/gameserver/plugin/protocode.go", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) | 109 | + fw, err = os.OpenFile(OutPath+"cmd/gameserver/action/protocode.go", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) |
110 | if err != nil { | 110 | if err != nil { |
111 | return fmt.Errorf("WriteNewFile|OpenFile is err:%v", err) | 111 | return fmt.Errorf("WriteNewFile|OpenFile is err:%v", err) |
112 | } | 112 | } |