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
|
EtcdClient: new(etcd.EtcdClient),
TaskQueue: make([]chan *MsgPkg, common.WorkerPoolSize),
}
}
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
39
40
41
42
|
func (s *Server) StartTimer() {
}
|
5d9cf01c
zhangqijia
plugin 热更
|
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
//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...
|
65
66
67
|
}
}
|
5d9cf01c
zhangqijia
plugin 热更
|
68
|
func (s *Server) DoMsgHandler(msg *MsgPkg) {
|
c92a54a3
zhangqijia
循环引用的问题
|
69
|
if md, ok := ActionMap[pb.ProtoCode(msg.Head.Cmd)]; ok {
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
70
|
logger.Debug("protocode handler: %d", msg.Head.Cmd)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
71
72
|
errCode, protomsg := md(msg)
rsp, err := proto.Marshal(protomsg)
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
73
|
fmt.Printf("errCode: %d, protomsg:%v\n", errCode, protomsg)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
74
75
76
77
78
79
80
|
if err != nil {
msg.Conn.SendMsgByCode(-100, msg.Head.Cmd, nil)
return
}
msg.Conn.SendMsgByCode(errCode, msg.Head.Cmd, rsp)
return
}
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
81
|
logger.Error("protocode not handler: %d", msg.Head.Cmd)
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
82
83
84
|
}
func (s *Server) OnClose(conn *Connection) {
|
98b0736d
zhangqijia
添加定时器, 检查心跳
|
85
|
//conn.Stop()
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
86
87
88
|
s.Clients.Delete(conn.Id)
}
|
5d9cf01c
zhangqijia
plugin 热更
|
89
90
|
func (s *Server) LoadPlugin() {
//重新加载
|
bca0b6f9
zhangqijia
重新加载plugin server...
|
91
|
_, err:=plugin.Open(conf.GlobalConf.GameConf.PluginPath)
|
5d9cf01c
zhangqijia
plugin 热更
|
92
|
if err != nil {
|
3f0a1991
zhangqijia
del test plugin
|
93
|
logger.Error("load plugin err: %v, %s", err, conf.GlobalConf.GameConf.PluginPath)
|
5d9cf01c
zhangqijia
plugin 热更
|
94
95
|
return
}
|
bca0b6f9
zhangqijia
重新加载plugin server...
|
96
|
logger.Debug("load plugin success")
|
5d9cf01c
zhangqijia
plugin 热更
|
97
98
|
}
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
99
|
func (s *Server)Start() error {
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
100
|
//mongo 初始化
|
5d9cf01c
zhangqijia
plugin 热更
|
101
|
db.MongoDatabase = db.MongoClient.Database(conf.GlobalConf.GameConf.DBName)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
102
103
104
|
models.InitGameServerModels()
//Etcd 初始化
|
3f0a1991
zhangqijia
del test plugin
|
105
106
107
108
109
|
var err error
s.EtcdClient, err = etcd.NewEtcdClient(conf.GlobalConf.Etcd)
if err != nil {
return err
}
|
c92a54a3
zhangqijia
循环引用的问题
|
110
|
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,游戏服改为长连...
|
111
|
|
5d9cf01c
zhangqijia
plugin 热更
|
112
|
//初始化plugin
|
3f0a1991
zhangqijia
del test plugin
|
113
|
_, err = plugin.Open(conf.GlobalConf.GameConf.PluginPath)
|
5d9cf01c
zhangqijia
plugin 热更
|
114
115
116
117
|
if err != nil {
return err
}
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
118
119
120
121
122
123
|
port := fmt.Sprintf(":%d", s.SConf.Port)
l, err := net.Listen("tcp", port)
if err != nil {
return err
}
|
5d9cf01c
zhangqijia
plugin 热更
|
124
125
|
s.StartWorkerPool()
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
126
|
logger.Debug("listen on %s\n", port)
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
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() {
}
|