eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
1
|
package service
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
2
3
|
import (
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
4
5
|
"github.com/golang/protobuf/proto"
"math"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
6
7
|
"pro2d/common"
"pro2d/common/components"
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
8
|
"pro2d/common/logger"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
9
|
"pro2d/models"
|
8d983031
zhangqijia
loginReq uid -> t...
|
10
|
"pro2d/pb"
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
11
|
"sync"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
12
13
14
15
16
17
|
"sync/atomic"
)
type Agent struct {
components.IConnection
Server components.IServer
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
18
|
components.IAgent
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
19
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
20
21
22
23
|
Role *models.RoleModel
nextCheckTime int64 //下一次检查的时间
lastHeartCheckTime int64
heartTimeoutCount int //超时次数
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
24
25
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
26
|
var agentPool = sync.Pool{New: func() interface{} { return new(Agent) }}
|
9a9d092e
zhangqijia
每条连接增加一个定时器,每条连接增...
|
27
|
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
28
29
30
|
func NewAgent(s components.IServer) *Agent {
a := agentPool.Get().(*Agent)
a.Server = s
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
31
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
32
|
a.nextCheckTime = 0
|
29a163be
zhangqijia
fix: CreateReq ui...
|
33
|
a.lastHeartCheckTime = common.Timex()
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
34
|
a.heartTimeoutCount = 0
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
35
|
return a
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
36
37
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
38
39
|
func (c *Agent) SetSchema(schema components.ISchema) {
c.Role = schema.(*models.RoleModel)
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
40
|
c.Role.SetConn(c)
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
41
42
|
c.Server.GetConnManage().AddRID(c.Role.Role.Id, c.IConnection.GetID())
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
43
44
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
45
46
47
|
func (c *Agent) GetSchema() components.ISchema {
return c.Role
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
48
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
49
50
|
func (c *Agent) SetServer(server components.IServer) {
c.Server = server
|
8d983031
zhangqijia
loginReq uid -> t...
|
51
52
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
53
54
55
|
func (c *Agent) GetServer() components.IServer {
return c.Server
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
56
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
57
58
59
60
61
62
63
|
func (c *Agent) OnConnection(conn components.IConnection) {
c.IConnection = conn
}
func (c *Agent) OnMessage(msg components.IMessage) {
atomic.StoreInt64(&c.lastHeartCheckTime, common.Timex())
if msg.GetHeader().GetMsgID() == uint32(pb.ProtoCode_HeartReq) {
|
8d983031
zhangqijia
loginReq uid -> t...
|
64
65
66
|
return
}
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
67
|
md := c.Server.GetAction(msg.GetHeader().GetMsgID())
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
68
|
if md == nil {
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
69
|
logger.Debug("cmd: %d, handler is nil", msg.GetHeader().GetMsgID())
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
70
71
|
return
}
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
72
73
|
logger.Debug("protocolID: %d", msg.GetHeader().GetMsgID())
//fmt.Printf("errCode: %d, protoMsg:%v\n", errCode, protoMsg)
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
74
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
75
76
|
f := md.(func(agent components.IAgent, msg components.IMessage) (int32, interface{}))
errCode, protoMsg := f(c, msg)
|
8d983031
zhangqijia
loginReq uid -> t...
|
77
|
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
78
|
if protoMsg == nil {
|
8d983031
zhangqijia
loginReq uid -> t...
|
79
|
c.Send(errCode, msg.GetHeader().GetMsgID(), nil)
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
80
81
82
|
return
}
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
83
84
85
86
87
88
|
if errCode != 0 {
logger.Error("errCode %d, msg: %v", errCode, protoMsg)
c.Send(errCode, msg.GetHeader().GetMsgID(), nil)
return
}
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
89
|
rsp, err := proto.Marshal(protoMsg.(proto.Message))
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
90
|
if err != nil {
|
8d983031
zhangqijia
loginReq uid -> t...
|
91
|
c.Send(-100, msg.GetHeader().GetMsgID(), nil)
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
92
|
return
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
93
|
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
94
|
c.Send(errCode, msg.GetHeader().GetMsgID(), rsp)
|
9a9d092e
zhangqijia
每条连接增加一个定时器,每条连接增...
|
95
96
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
97
|
func (c *Agent) OnTimer() {
|
9a9d092e
zhangqijia
每条连接增加一个定时器,每条连接增...
|
98
|
nextCheckTime := atomic.LoadInt64(&c.nextCheckTime)
|
29a163be
zhangqijia
fix: CreateReq ui...
|
99
|
now := common.Timex()
|
9a9d092e
zhangqijia
每条连接增加一个定时器,每条连接增...
|
100
101
102
103
104
105
106
107
108
109
|
if now >= nextCheckTime {
//检查心跳
c.checkHeartBeat(now)
nextCheckTime = now + common.HeartTimerInterval
atomic.StoreInt64(&c.nextCheckTime, nextCheckTime)
}
if c.Role != nil {
//role 恢复数据
c.Role.OnRecoverTimer(now)
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
110
|
}
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
111
112
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
113
114
|
func (c *Agent) OnClose() {
c.IConnection = nil
|
8d983031
zhangqijia
loginReq uid -> t...
|
115
|
c.Role = nil
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
116
117
|
agentPool.Put(c)
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
118
119
120
121
|
if c.Role == nil {
return
}
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
122
|
c.Server.GetConnManage().DelRID(c.Role.Role.Id)
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
123
124
125
|
c.Role.OnOfflineEvent()
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
126
|
func (c *Agent) checkHeartBeat(now int64) {
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
127
|
lastHeartCheckTime := atomic.LoadInt64(&c.lastHeartCheckTime)
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
128
|
//logger.Debug("checkHeartBeat ID: %d, last: %d, now: %d", c.GetID(), lastHeartCheckTime, now)
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
129
|
if math.Abs(float64(lastHeartCheckTime-now)) > common.HeartTimerInterval {
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
130
131
132
133
134
135
|
c.heartTimeoutCount++
if c.heartTimeoutCount >= common.HeartTimeoutCountMax {
c.Stop()
return
}
logger.Debug("timeout count: %d", c.heartTimeoutCount)
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
136
|
} else {
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
137
138
139
|
c.heartTimeoutCount = 0
}
}
|