ee23102d
zhangqijia
支持mongo, grpc接服务器
|
1
2
3
|
package models
import (
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
4
|
"fmt"
|
4255fd8e
zhangqijia
feat: 更新字段
|
5
|
"github.com/golang/protobuf/proto"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
6
|
"pro2d/common"
|
8d983031
zhangqijia
loginReq uid -> t...
|
7
|
"pro2d/common/components"
|
436e0af4
zhangqijia
reactor: dir; Ac...
|
8
|
"pro2d/common/db/mongoproxy"
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
9
|
"pro2d/common/logger"
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
10
|
"pro2d/pb"
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
11
|
"sync/atomic"
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
12
13
14
|
)
type RoleModel struct {
|
8d983031
zhangqijia
loginReq uid -> t...
|
15
|
components.ISchema
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
16
|
Role *pb.Role
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
17
18
|
Heros SchemaMap
Teams SchemaMap
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
19
|
Prop *PropModel
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
20
|
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
21
|
lastSaveTs int64
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
22
23
|
}
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
24
|
func RoleExistByUid(uid string) *RoleModel {
|
1584eb4b
zhangqijia
修复创建唯一索引的bug
|
25
26
|
data := &pb.Role{Uid: uid}
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
27
|
if err := mongoproxy.FindOne(mongoproxy.GetCollName(data), mongoproxy.GetBsonM("uid", uid), data); err != nil {
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
28
|
logger.Error("Role not exist err: %v", err)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
29
|
return nil
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
30
|
}
|
f7f4beb5
zhangqijia
新增grpc平滑关闭,修复crea...
|
31
|
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
32
|
r := &RoleModel{
|
8d983031
zhangqijia
loginReq uid -> t...
|
33
|
ISchema: NewSchema(data.Id, data),
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
34
35
36
37
|
Role: data,
Heros: make(SchemaMap),
Teams: make(SchemaMap),
Prop: new(PropModel),
|
f7f4beb5
zhangqijia
新增grpc平滑关闭,修复crea...
|
38
|
}
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
39
|
r.Load()
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
40
41
|
r.LoadAll()
return r
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
42
43
|
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
44
|
func NewRole(id string) *RoleModel {
|
1584eb4b
zhangqijia
修复创建唯一索引的bug
|
45
|
data := &pb.Role{Id: id}
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
46
|
m := &RoleModel{
|
8d983031
zhangqijia
loginReq uid -> t...
|
47
|
ISchema: NewSchema(id, data),
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
48
49
50
|
Role: data,
Heros: make(SchemaMap),
Teams: make(SchemaMap),
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
51
|
}
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
52
53
54
|
return m
}
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
55
56
57
58
59
60
61
62
63
64
65
66
|
func (m *RoleModel) IncreByKey(key string, detal int64) int64 {
v, ok := m.Role.Incres[key]
if !ok {
v = detal
} else {
v += detal
}
m.Role.Incres[key] = v
m.SetProperty("incres", m.Role.Incres)
return v + common.MaxCommNum
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
67
|
func (m *RoleModel) InitRole() {
|
8d983031
zhangqijia
loginReq uid -> t...
|
68
69
|
//init hero
h1 := pb.Hero{
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
70
|
Id: fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1)),
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
71
72
73
74
75
|
RoleId: m.Role.Id,
Type: 1,
Level: 1,
ReinCount: 0,
ReinPoint: 0,
|
8d983031
zhangqijia
loginReq uid -> t...
|
76
|
Equipments: "",
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
77
|
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
78
79
80
|
m.AddHero(&h1)
h2 := h1
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
81
|
h2.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1))
|
8d983031
zhangqijia
loginReq uid -> t...
|
82
83
84
85
|
h2.Type = 2
m.AddHero(&h2)
h3 := h1
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
86
|
h3.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1))
|
8d983031
zhangqijia
loginReq uid -> t...
|
87
88
89
90
|
h3.Type = 3
m.AddHero(&h3)
h4 := h1
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
91
|
h4.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("hero", 1))
|
8d983031
zhangqijia
loginReq uid -> t...
|
92
93
94
95
96
|
h4.Type = 4
m.AddHero(&h4)
//init team
t1 := pb.Team{
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
97
|
Id: fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1)),
|
8d983031
zhangqijia
loginReq uid -> t...
|
98
99
100
101
102
103
104
105
|
RoleId: m.Role.Id,
HeroId1: h1.Id,
HeroId2: h2.Id,
HeroId3: h3.Id,
}
m.AddTeam(&t1)
t2 := t1
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
106
|
t2.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1))
|
8d983031
zhangqijia
loginReq uid -> t...
|
107
108
109
|
m.AddTeam(&t2)
t3 := t1
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
110
|
t3.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1))
|
8d983031
zhangqijia
loginReq uid -> t...
|
111
112
113
|
m.AddTeam(&t3)
t4 := t1
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
114
|
t4.Id = fmt.Sprintf("%s%d", m.Role.Id, m.IncreByKey("team", 1))
|
8d983031
zhangqijia
loginReq uid -> t...
|
115
|
m.AddTeam(&t4)
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
116
|
}
|
eb417b0b
zhangqijia
reactor mongo
|
117
|
|
8d983031
zhangqijia
loginReq uid -> t...
|
118
119
|
func (m *RoleModel) LoadHero() {
heros := make([]*pb.Hero, 10)
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
120
|
err := mongoproxy.FindMany("hero", "roleid", m.Role.Id, &heros)
|
8d983031
zhangqijia
loginReq uid -> t...
|
121
122
123
124
125
126
|
if err != nil {
logger.Error(err)
return
}
for _, hero := range heros {
m.Heros[hero.Id] = NewHero(hero)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
127
128
129
|
}
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
130
131
|
func (m *RoleModel) LoadTeams() {
teams := make([]*pb.Team, 4)
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
132
|
err := mongoproxy.FindMany("team", "roleid", m.Role.Id, &teams)
|
8d983031
zhangqijia
loginReq uid -> t...
|
133
134
135
136
|
if err != nil {
logger.Error(err)
return
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
137
|
for _, team := range teams {
|
8d983031
zhangqijia
loginReq uid -> t...
|
138
|
m.Teams[team.Id] = NewTeam(team)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
139
140
141
|
}
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
142
|
func (m *RoleModel) LoadAll() {
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
143
144
|
m.LoadHero()
m.LoadTeams()
|
eb417b0b
zhangqijia
reactor mongo
|
145
146
|
}
|
4255fd8e
zhangqijia
feat: 更新字段
|
147
|
func (m *RoleModel) UpdateProperty(conn components.IConnection, key string, val interface{}, notify bool) {
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
148
|
m.UpdateProperties(conn, map[string]interface{}{key: val}, notify)
|
4255fd8e
zhangqijia
feat: 更新字段
|
149
150
151
152
153
154
155
|
}
func (m *RoleModel) UpdateProperties(conn components.IConnection, property map[string]interface{}, notify bool) {
if len(property) < 1 {
return
}
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
156
|
role := &pb.Role{}
|
4255fd8e
zhangqijia
feat: 更新字段
|
157
158
159
160
161
162
163
|
ids := m.ParseFields(role.ProtoReflect(), property)
if len(ids) == 0 {
logger.Error("ParseFields err, len is 0")
return
}
update := &pb.UpdateRolePropertyRsp{
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
164
|
Id: ids,
|
4255fd8e
zhangqijia
feat: 更新字段
|
165
166
167
168
169
|
Role: role,
}
if rsp, err := proto.Marshal(update); err != nil {
logger.Error("id %s, err:", m.Role.Id, err)
return
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
170
|
} else {
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
171
|
if conn != nil && notify {
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
172
173
|
conn.Send(0, uint32(pb.ProtoCode_UpdateRolePropertyRsp), rsp)
}
|
4255fd8e
zhangqijia
feat: 更新字段
|
174
|
}
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
175
176
|
}
|
2e0aa298
zhangqijia
update 每条连接新增一条协程...
|
177
178
179
|
func (m *RoleModel) GetAllHero() []*pb.Hero {
var h []*pb.Hero
for _, hero := range m.Heros {
|
8d983031
zhangqijia
loginReq uid -> t...
|
180
|
h = append(h, hero.(*HeroModel).Hero)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
181
182
183
|
}
return h
}
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
184
|
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
185
|
func (m *RoleModel) GetAllTeam() []*pb.Team {
|
8d983031
zhangqijia
loginReq uid -> t...
|
186
|
var t []*pb.Team
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
187
188
|
for _, team := range m.Teams {
t = append(t, team.(*TeamModel).Team)
|
8d983031
zhangqijia
loginReq uid -> t...
|
189
190
191
192
|
}
return t
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
193
194
|
func (m *RoleModel) AddHero(hero *pb.Hero) {
h := NewHero(hero)
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
195
|
h.Create()
|
8d983031
zhangqijia
loginReq uid -> t...
|
196
197
198
199
200
201
202
203
204
|
m.Heros[hero.Id] = h
}
func (m *RoleModel) AddTeam(team *pb.Team) {
t := NewTeam(team)
t.Create()
m.Teams[team.Id] = t
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
205
206
207
208
209
210
211
212
213
214
|
func (m *RoleModel) UpdateTeam(teams []*pb.Team) {
for _, team := range teams {
team.RoleId = m.Role.Id
t := m.Teams[team.Id]
if t != nil {
t.UpdateSchema(team)
}
}
}
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
215
|
func (m *RoleModel) OnRecoverTimer(now int64) {
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
216
|
m.SaveRoleData(now)
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
217
218
|
}
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
219
220
|
func (m *RoleModel) OnOfflineEvent() {
// 设置最新的登录时间
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
221
|
m.SaveRoleData(common.Timex())
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
222
223
|
}
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
224
225
|
func (m *RoleModel) SaveRoleData(now int64) {
if now > 0 && now-m.lastSaveTs < common.SaveDataInterval {
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
226
227
228
229
|
return
}
atomic.StoreInt64(&m.lastSaveTs, now)
m.Update()
|
8d983031
zhangqijia
loginReq uid -> t...
|
230
231
232
233
234
235
236
237
|
tbObjs := []components.ISchema{}
for _, tbObj := range tbObjs {
if tbObj != nil {
tbObj.Update()
}
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
238
239
240
241
242
243
244
245
246
|
mpObjs := []SchemaMap{m.Heros, m.Teams}
for _, mpObj := range mpObjs {
for _, v := range mpObj {
if v != nil {
v.Update()
}
}
}
}
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
|
func (m *RoleModel) IncrPropertyChan(conn components.IConnection, key string, val int64) {
if conn != nil {
conn.CustomChan() <- func() {
m.IncrProperty(key, val)
}
} else {
m.IncrProperty(key, val)
}
}
func (m *RoleModel) UpdatePropertyChan(conn components.IConnection, key string, val interface{}, notify bool) {
if conn != nil {
conn.CustomChan() <- func() {
m.UpdateProperties(conn, map[string]interface{}{key: val}, notify)
}
} else {
m.UpdateProperties(conn, map[string]interface{}{key: val}, notify)
}
}
func (m *RoleModel) SaveRoleDataChan(conn components.IConnection, now int64) {
if conn != nil {
conn.CustomChan() <- func() {
m.SaveRoleData(now)
}
} else {
m.SaveRoleData(now)
}
}
|