eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
1
|
package service
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
2
3
|
import (
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
4
|
"fmt"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
5
6
|
"github.com/golang/protobuf/proto"
"math"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
7
8
|
"pro2d/common"
"pro2d/common/components"
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
9
|
"pro2d/common/logger"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
10
|
"pro2d/models"
|
8d983031
zhangqijia
loginReq uid -> t...
|
11
|
"pro2d/pb"
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
12
|
"sync"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
13
14
15
16
17
18
|
"sync/atomic"
)
type Agent struct {
components.IConnection
Server components.IServer
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
19
|
components.IAgent
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
20
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
21
22
23
24
|
Role *models.RoleModel
nextCheckTime int64 //下一次检查的时间
lastHeartCheckTime int64
heartTimeoutCount int //超时次数
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
25
26
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
27
|
var agentPool = sync.Pool{New: func() interface{} { return new(Agent) }}
|
9a9d092e
zhangqijia
每条连接增加一个定时器,每条连接增...
|
28
|
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
29
30
31
|
func NewAgent(s components.IServer) *Agent {
a := agentPool.Get().(*Agent)
a.Server = s
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
32
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
33
|
a.nextCheckTime = 0
|
29a163be
zhangqijia
fix: CreateReq ui...
|
34
|
a.lastHeartCheckTime = common.Timex()
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
35
|
a.heartTimeoutCount = 0
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
36
|
return a
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
37
38
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
39
40
|
func (c *Agent) SetSchema(schema components.ISchema) {
c.Role = schema.(*models.RoleModel)
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
41
|
c.Role.SetConn(c)
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
42
|
|
23822e2f
zhangqijia
fix: update proto...
|
43
44
|
c.Server.GetConnManage().AddRID(c.Role.Data.Id, c.IConnection.GetID())
c.Server.GetConnManage().AddUID(c.Role.Data.Uid, c.IConnection.GetID())
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
45
46
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
47
48
49
|
func (c *Agent) GetSchema() components.ISchema {
return c.Role
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
50
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
51
52
|
func (c *Agent) SetServer(server components.IServer) {
c.Server = server
|
8d983031
zhangqijia
loginReq uid -> t...
|
53
54
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
55
56
57
|
func (c *Agent) GetServer() components.IServer {
return c.Server
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
58
|
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
59
60
61
62
|
func (c *Agent) OnConnection(conn components.IConnection) {
c.IConnection = conn
}
|
4a502dd5
zhangqijia
fix: game,account...
|
63
64
65
|
/*OnLoginQuery 登录请求
2 角色不存在
*/
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
66
|
func (c *Agent) OnLoginQuery(msg components.IMessage) (int32, proto.Message) {
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
67
68
69
70
71
72
|
req := pb.LoginReq{}
if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
logger.Error("loginRpc err: %v", err)
return 1, nil
}
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
73
74
75
76
|
uid := req.Token
// 判断是否已经登录 ,挤掉,断开连接
conn := c.Server.GetConnManage().GetConnByUID(uid)
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
77
78
|
if conn != nil {
logger.Debug("挤掉。。。。。。。。")
|
8568cf44
zhangqijia
update preserve
|
79
|
conn.SendSuccess(uint32(pb.ProtoCode_DisConnectNty), nil, msg.GetHeader().GetPreserve())
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
80
81
82
83
|
conn.Stop()
}
role := models.RoleExistByUid(uid)
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
84
85
86
87
|
if role == nil {
return 2, nil
}
role.SetProperty("Device", req.Device)
|
f8ce769e
zhangqijia
fix: rpc = rar + ...
|
88
|
protoMsg := &pb.LoginRsp{
|
23822e2f
zhangqijia
fix: update proto...
|
89
|
Role: role.Data,
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
90
91
92
93
94
95
96
97
98
|
Hero: role.GetAllHero(),
Team: role.GetAllTeam(),
Equipments: role.GetEquipments(),
}
//登录成功,存储agent role
c.SetSchema(role)
return 0, protoMsg
}
|
8568cf44
zhangqijia
update preserve
|
99
|
func (c *Agent) SendMsg(errCode int32, cmd uint32, msg interface{}, preserve uint32) error {
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
100
|
if msg == nil || errCode != 0 {
|
8568cf44
zhangqijia
update preserve
|
101
|
return c.Send(errCode, cmd, nil, preserve)
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
102
103
104
|
}
rsp, err := proto.Marshal(msg.(proto.Message))
if err != nil {
|
8568cf44
zhangqijia
update preserve
|
105
|
return c.Send(-100, cmd, nil, preserve)
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
106
|
}
|
8568cf44
zhangqijia
update preserve
|
107
|
return c.Send(errCode, cmd, rsp, preserve)
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
108
109
|
}
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
110
|
func (c *Agent) OnMessage(msg components.IMessage) error {
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
111
|
atomic.StoreInt64(&c.lastHeartCheckTime, common.Timex())
|
81289393
zhangqijia
update
|
112
|
logger.Debug("req protocolID: %d, %s", msg.GetHeader().GetMsgID(), msg.GetData())
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
113
|
//heart
|
a7566463
zhangqijia
fix: update proto...
|
114
|
if msg.GetHeader().GetMsgID() == uint32(pb.ProtoCode_HeartRpc) {
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
115
|
return nil
|
8d983031
zhangqijia
loginReq uid -> t...
|
116
117
|
}
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
118
|
//login
|
a7566463
zhangqijia
fix: update proto...
|
119
|
if msg.GetHeader().GetMsgID() == uint32(pb.ProtoCode_LoginRpc) {
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
120
|
code, protoMsg := c.OnLoginQuery(msg)
|
8568cf44
zhangqijia
update preserve
|
121
|
return c.SendMsg(code, msg.GetHeader().GetMsgID(), protoMsg, msg.GetHeader().GetPreserve())
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
122
123
124
|
}
//get handler by msgid
|
8568cf44
zhangqijia
update preserve
|
125
126
|
method := c.Server.GetAction(msg.GetHeader().GetMsgID())
if method == nil {
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
127
|
return fmt.Errorf("cmd: %d, handler is nil", msg.GetHeader().GetMsgID())
|
77f5eec7
zhangqijia
plugin 插件热更 接口
|
128
|
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
129
|
|
a7566463
zhangqijia
fix: update proto...
|
130
|
if msg.GetHeader().GetMsgID() != uint32(pb.ProtoCode_CreateRpc) && c.Role == nil {
|
8568cf44
zhangqijia
update preserve
|
131
|
return c.Send(-101, msg.GetHeader().GetMsgID(), nil, msg.GetHeader().GetPreserve())
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
132
133
|
}
|
fc3e08ac
zhangqijia
feat: add log com...
|
134
135
|
c.Role.StartActionUnicode()
|
8568cf44
zhangqijia
update preserve
|
136
137
|
// 调用协议号对应的逻辑函数
f := method.(func(role *models.RoleModel, msg components.IMessage) (int32, interface{}))
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
138
|
errCode, protoMsg := f(c.Role, msg)
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
139
|
logger.Debug("rsp errcode: %d, protocode: %d", errCode, msg.GetHeader().GetMsgID())
|
fc3e08ac
zhangqijia
feat: add log com...
|
140
141
142
143
|
err := c.SendMsg(errCode, msg.GetHeader().GetMsgID(), protoMsg, msg.GetHeader().GetPreserve())
c.Role.EndActionUnicode()
return err
|
9a9d092e
zhangqijia
每条连接增加一个定时器,每条连接增...
|
144
145
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
146
|
func (c *Agent) OnTimer() {
|
9a9d092e
zhangqijia
每条连接增加一个定时器,每条连接增...
|
147
|
nextCheckTime := atomic.LoadInt64(&c.nextCheckTime)
|
29a163be
zhangqijia
fix: CreateReq ui...
|
148
|
now := common.Timex()
|
9a9d092e
zhangqijia
每条连接增加一个定时器,每条连接增...
|
149
150
151
152
153
154
155
156
157
158
|
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
|
159
|
}
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
160
161
|
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
162
163
|
func (c *Agent) OnClose() {
c.IConnection = nil
|
8d983031
zhangqijia
loginReq uid -> t...
|
164
|
c.Role = nil
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
165
166
|
agentPool.Put(c)
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
167
168
169
170
|
if c.Role == nil {
return
}
|
23822e2f
zhangqijia
fix: update proto...
|
171
172
173
|
logger.Debug("ID: %d close, roleid", c.IConnection.GetID(), c.Role.Data.Id)
c.Server.GetConnManage().DelRID(c.Role.Data.Id)
c.Server.GetConnManage().DelUID(c.Role.Data.Uid)
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
174
175
176
|
c.Role.OnOfflineEvent()
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
177
|
func (c *Agent) checkHeartBeat(now int64) {
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
178
|
lastHeartCheckTime := atomic.LoadInt64(&c.lastHeartCheckTime)
|
58e37bfe
zhangqijia
add sync.Pool to ...
|
179
|
//logger.Debug("checkHeartBeat ID: %d, last: %d, now: %d", c.GetID(), lastHeartCheckTime, now)
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
180
|
if math.Abs(float64(lastHeartCheckTime-now)) > common.HeartTimerInterval {
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
181
182
183
184
185
|
c.heartTimeoutCount++
if c.heartTimeoutCount >= common.HeartTimeoutCountMax {
c.Stop()
return
}
|
8f6d9ea9
zhangqijia
fix: UpLevel
|
186
|
//logger.Debug("timeout count: %d", c.heartTimeoutCount)
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
187
|
} else {
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
188
189
190
|
c.heartTimeoutCount = 0
}
}
|