fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
1
2
3
4
|
package net
import (
"fmt"
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
5
|
"github.com/golang/protobuf/proto"
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
6
|
"net"
|
5d9cf01c
zhangqijia
plugin 热更
|
7
|
"plugin"
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
8
|
"pro2d/conf"
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
9
|
"pro2d/protos/pb"
|
5d9cf01c
zhangqijia
plugin 热更
|
10
|
"pro2d/src/common"
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
11
12
13
14
|
"pro2d/src/components/db"
"pro2d/src/components/etcd"
"pro2d/src/components/logger"
"pro2d/src/models"
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
15
16
17
|
"sync"
)
|
c92a54a3
zhangqijia
循环引用的问题
|
18
19
20
|
type ActionHandler func (msg *MsgPkg) (int32, proto.Message)
var ActionMap map[pb.ProtoCode]ActionHandler
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
21
22
23
|
type Server struct {
SConf *conf.SConf
Clients *sync.Map
|
c92a54a3
zhangqijia
循环引用的问题
|
24
|
EtcdClient *etcd.EtcdClient
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
25
|
|
5d9cf01c
zhangqijia
plugin 热更
|
26
|
TaskQueue []chan*MsgPkg
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
27
28
29
30
31
32
|
}
func NewServer(sConf *conf.SConf) *Server {
return &Server{
SConf: sConf,
Clients: new(sync.Map),
|
5d9cf01c
zhangqijia
plugin 热更
|
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
|
EtcdClient: new(etcd.EtcdClient),
TaskQueue: make([]chan *MsgPkg, common.WorkerPoolSize),
}
}
//StartWorkerPool 启动worker工作池
func (s *Server) StartWorkerPool() {
//遍历需要启动worker的数量,依此启动
for i := 0; i < s.SConf.WorkerPoolSize; i++ {
//一个worker被启动
//给当前worker对应的任务队列开辟空间
s.TaskQueue[i] = make(chan *MsgPkg, common.MaxTaskPerWorker)
//启动当前Worker,阻塞的等待对应的任务队列是否有消息传递进来
go s.StartOneWorker(i, s.TaskQueue[i])
}
}
//StartOneWorker 启动一个Worker工作流程
func (s *Server) StartOneWorker(workerID int, taskQueue chan *MsgPkg) {
//不断的等待队列中的消息
for {
select {
//有消息则取出队列的Request,并执行绑定的业务方法
case request := <-taskQueue:
_ = workerID
s.DoMsgHandler(request)
}
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
61
62
63
|
}
}
|
5d9cf01c
zhangqijia
plugin 热更
|
64
65
|
func (s *Server) DoMsgHandler(msg *MsgPkg) {
logger.Debug("DoMsgHandler cmd: %d, data: %s", msg.Head.Cmd, msg.Body)
|
c92a54a3
zhangqijia
循环引用的问题
|
66
|
if md, ok := ActionMap[pb.ProtoCode(msg.Head.Cmd)]; ok {
|
5d9cf01c
zhangqijia
plugin 热更
|
67
|
logger.Debug("adfadfadfasdfadfadsf")
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
68
69
70
71
72
73
74
75
76
|
errCode, protomsg := md(msg)
rsp, err := proto.Marshal(protomsg)
if err != nil {
msg.Conn.SendMsgByCode(-100, msg.Head.Cmd, nil)
return
}
msg.Conn.SendMsgByCode(errCode, msg.Head.Cmd, rsp)
return
}
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
77
|
logger.Error("protocode not handler: %d", msg.Head.Cmd)
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
78
79
80
81
82
83
|
}
func (s *Server) OnClose(conn *Connection) {
s.Clients.Delete(conn.Id)
}
|
5d9cf01c
zhangqijia
plugin 热更
|
84
85
|
func (s *Server) LoadPlugin() {
//重新加载
|
bca0b6f9
zhangqijia
重新加载plugin server...
|
86
|
_, err:=plugin.Open(conf.GlobalConf.GameConf.PluginPath)
|
5d9cf01c
zhangqijia
plugin 热更
|
87
|
if err != nil {
|
3f0a1991
zhangqijia
del test plugin
|
88
|
logger.Error("load plugin err: %v, %s", err, conf.GlobalConf.GameConf.PluginPath)
|
5d9cf01c
zhangqijia
plugin 热更
|
89
90
|
return
}
|
bca0b6f9
zhangqijia
重新加载plugin server...
|
91
|
logger.Debug("load plugin success")
|
5d9cf01c
zhangqijia
plugin 热更
|
92
93
|
}
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
94
|
func (s *Server)Start() error {
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
95
|
//mongo 初始化
|
5d9cf01c
zhangqijia
plugin 热更
|
96
|
db.MongoDatabase = db.MongoClient.Database(conf.GlobalConf.GameConf.DBName)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
97
98
99
|
models.InitGameServerModels()
//Etcd 初始化
|
3f0a1991
zhangqijia
del test plugin
|
100
101
102
103
104
|
var err error
s.EtcdClient, err = etcd.NewEtcdClient(conf.GlobalConf.Etcd)
if err != nil {
return err
}
|
c92a54a3
zhangqijia
循环引用的问题
|
105
|
s.EtcdClient.PutWithLeasePrefix(conf.GlobalConf.GameConf.Name, conf.GlobalConf.GameConf.ID, fmt.Sprintf("%s:%d", conf.GlobalConf.GameConf.IP, conf.GlobalConf.GameConf.Port), 5)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
106
|
|
5d9cf01c
zhangqijia
plugin 热更
|
107
|
//初始化plugin
|
3f0a1991
zhangqijia
del test plugin
|
108
|
_, err = plugin.Open(conf.GlobalConf.GameConf.PluginPath)
|
5d9cf01c
zhangqijia
plugin 热更
|
109
110
111
112
|
if err != nil {
return err
}
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
113
114
115
116
117
118
|
port := fmt.Sprintf(":%d", s.SConf.Port)
l, err := net.Listen("tcp", port)
if err != nil {
return err
}
|
5d9cf01c
zhangqijia
plugin 热更
|
119
120
|
s.StartWorkerPool()
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
121
|
logger.Debug("listen on %s\n", port)
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
id := 0
for {
conn, err := l.Accept()
if err != nil {
return err
}
id++
client := NewConn(id, conn, s)
s.Clients.Store(id, client)
go client.Start()
}
}
func (s *Server)Stop() {
}
|