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
|
"pro2d/src/components/db"
"pro2d/src/components/etcd"
"pro2d/src/components/logger"
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
14
|
"pro2d/src/components/timewheel"
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
15
|
"pro2d/src/models"
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
16
|
"sync"
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
17
|
"time"
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
18
19
|
)
|
c92a54a3
zhangqijia
循环引用的问题
|
20
21
|
type ActionHandler func (msg *MsgPkg) (int32, proto.Message)
var ActionMap map[pb.ProtoCode]ActionHandler
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
22
|
var TimeWheel *timewheel.TimeWheel
|
c92a54a3
zhangqijia
循环引用的问题
|
23
|
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
24
25
26
|
type Server struct {
SConf *conf.SConf
Clients *sync.Map
|
c92a54a3
zhangqijia
循环引用的问题
|
27
|
EtcdClient *etcd.EtcdClient
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
28
|
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
29
|
TaskQueue []chan func()
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
30
31
32
33
34
35
|
}
func NewServer(sConf *conf.SConf) *Server {
return &Server{
SConf: sConf,
Clients: new(sync.Map),
|
5d9cf01c
zhangqijia
plugin 热更
|
36
37
|
EtcdClient: new(etcd.EtcdClient),
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
38
|
TaskQueue: make([]chan func(), common.WorkerPoolSize),
|
5d9cf01c
zhangqijia
plugin 热更
|
39
40
41
|
}
}
|
5d9cf01c
zhangqijia
plugin 热更
|
42
43
44
45
46
47
|
//StartWorkerPool 启动worker工作池
func (s *Server) StartWorkerPool() {
//遍历需要启动worker的数量,依此启动
for i := 0; i < s.SConf.WorkerPoolSize; i++ {
//一个worker被启动
//给当前worker对应的任务队列开辟空间
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
48
|
s.TaskQueue[i] = make(chan func(), common.MaxTaskPerWorker)
|
5d9cf01c
zhangqijia
plugin 热更
|
49
50
51
52
53
54
|
//启动当前Worker,阻塞的等待对应的任务队列是否有消息传递进来
go s.StartOneWorker(i, s.TaskQueue[i])
}
}
//StartOneWorker 启动一个Worker工作流程
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
55
|
func (s *Server) StartOneWorker(workerID int, taskQueue chan func()) {
|
5d9cf01c
zhangqijia
plugin 热更
|
56
57
58
59
|
//不断的等待队列中的消息
for {
select {
//有消息则取出队列的Request,并执行绑定的业务方法
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
60
|
case f:= <-taskQueue:
|
5d9cf01c
zhangqijia
plugin 热更
|
61
|
_ = workerID
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
62
63
|
f()
//s.DoMsgHandler(request)
|
5d9cf01c
zhangqijia
plugin 热更
|
64
|
}
|
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
|
}
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
99
100
101
102
103
104
105
|
func (s *Server) handleTimeOut() {
s.Clients.Range(func(key, value interface{}) bool {
client := value.(*Connection)
client.update()
return true
})
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
106
|
timewheel.TimeOut(1*time.Second, s.handleTimeOut)
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
107
108
|
}
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
109
|
func (s *Server)Start() error {
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
110
|
//mongo 初始化
|
5d9cf01c
zhangqijia
plugin 热更
|
111
|
db.MongoDatabase = db.MongoClient.Database(conf.GlobalConf.GameConf.DBName)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
112
113
114
|
models.InitGameServerModels()
//Etcd 初始化
|
3f0a1991
zhangqijia
del test plugin
|
115
116
117
118
119
|
var err error
s.EtcdClient, err = etcd.NewEtcdClient(conf.GlobalConf.Etcd)
if err != nil {
return err
}
|
c92a54a3
zhangqijia
循环引用的问题
|
120
|
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,游戏服改为长连...
|
121
|
|
5d9cf01c
zhangqijia
plugin 热更
|
122
|
//初始化plugin
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
123
124
125
126
|
//_, err = plugin.Open(conf.GlobalConf.GameConf.PluginPath)
//if err != nil {
// return err
//}
|
5d9cf01c
zhangqijia
plugin 热更
|
127
|
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
128
129
130
131
132
133
|
port := fmt.Sprintf(":%d", s.SConf.Port)
l, err := net.Listen("tcp", port)
if err != nil {
return err
}
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
134
|
//启动协程池
|
5d9cf01c
zhangqijia
plugin 热更
|
135
136
|
s.StartWorkerPool()
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
137
|
//启动定时器
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
138
139
140
|
s.handleTimeOut()
//监听端口
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
141
|
logger.Debug("listen on %s\n", port)
|
fee11bff
zhangqijia
客户端无法使用grpc热更,不用g...
|
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
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() {
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
157
158
|
TimeWheel.Stop()
}
|