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
|
)
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
14
|
type RoleModel struct {
|
8d983031
zhangqijia
loginReq uid -> t...
|
15
|
components.ISchema
|
23822e2f
zhangqijia
fix: update proto...
|
16
|
Data *pb.Role
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
17
18
19
20
|
Heros SchemaMap
Teams SchemaMap
Equipments SchemaMap
Prop *PropModel
|
ddc88bac
zhangqijia
fix: 记录战斗
|
21
|
Items common.IMapStringNum //背包
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
22
|
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
23
|
lastSaveTs int64
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
24
25
|
}
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
26
|
func RoleExistByUid(uid string) *RoleModel {
|
a2d4f770
zhangqijia
fix: 首次通关记录到数据库
|
27
|
data := &pb.Role{Uid: uid, Incres: make(map[string]uint32), Passchapters: make(map[int32]int32)}
|
1584eb4b
zhangqijia
修复创建唯一索引的bug
|
28
|
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
29
|
if err := mongoproxy.FindOne(mongoproxy.GetCollName(data), mongoproxy.GetBsonM("uid", uid), data); err != nil {
|
23822e2f
zhangqijia
fix: update proto...
|
30
|
logger.Error("Data not exist err: %v", err)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
31
|
return nil
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
32
|
}
|
f7f4beb5
zhangqijia
新增grpc平滑关闭,修复crea...
|
33
|
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
34
|
r := &RoleModel{
|
c047d94f
zhangqijia
fix: update equip...
|
35
|
ISchema: NewSchema(data.Id, data),
|
23822e2f
zhangqijia
fix: update proto...
|
36
|
Data: data,
|
c047d94f
zhangqijia
fix: update equip...
|
37
38
39
40
|
Heros: make(SchemaMap),
Teams: make(SchemaMap),
Equipments: make(SchemaMap),
Prop: new(PropModel),
|
ddc88bac
zhangqijia
fix: 记录战斗
|
41
|
Items: make(common.IMapStringNum),
|
f7f4beb5
zhangqijia
新增grpc平滑关闭,修复crea...
|
42
|
}
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
43
|
r.Load()
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
44
45
|
r.LoadAll()
return r
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
46
47
|
}
|
33ea26ab
zhangqijia
使用schema封装mongo
|
48
|
func NewRole(id string) *RoleModel {
|
a2d4f770
zhangqijia
fix: 首次通关记录到数据库
|
49
|
data := &pb.Role{Id: id, Incres: make(map[string]uint32), Passchapters: make(map[int32]int32)}
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
50
|
m := &RoleModel{
|
c047d94f
zhangqijia
fix: update equip...
|
51
|
ISchema: NewSchema(id, data),
|
23822e2f
zhangqijia
fix: update proto...
|
52
|
Data: data,
|
c047d94f
zhangqijia
fix: update equip...
|
53
54
55
56
|
Heros: make(SchemaMap),
Teams: make(SchemaMap),
Equipments: make(SchemaMap),
Prop: new(PropModel),
|
ddc88bac
zhangqijia
fix: 记录战斗
|
57
|
Items: make(common.IMapStringNum),
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
58
|
}
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
59
60
61
|
return m
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
62
|
func (m *RoleModel) IncreByKey(key string, detal uint32) uint32 {
|
23822e2f
zhangqijia
fix: update proto...
|
63
|
v, ok := m.Data.Incres[key]
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
64
65
66
67
68
|
if !ok {
v = detal
} else {
v += detal
}
|
23822e2f
zhangqijia
fix: update proto...
|
69
70
|
m.Data.Incres[key] = v
m.SetProperty("incres", m.Data.Incres)
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
71
72
73
|
return v
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
74
|
func (m *RoleModel) IncreHearByKey(detal uint32) string {
|
23822e2f
zhangqijia
fix: update proto...
|
75
|
return fmt.Sprintf("%s%04d", m.Data.Id, m.IncreByKey("hero", detal))
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
76
|
}
|
d6d589a9
zhangqijia
feat: 增加装备接口
|
77
|
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
78
|
func (m *RoleModel) IncreTeamByKey(detal uint32) string {
|
23822e2f
zhangqijia
fix: update proto...
|
79
|
return fmt.Sprintf("%s%02d", m.Data.Id, m.IncreByKey("team", detal))
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
80
81
|
}
|
d6d589a9
zhangqijia
feat: 增加装备接口
|
82
|
func (m *RoleModel) IncreEquipByKey(detal uint32) string {
|
23822e2f
zhangqijia
fix: update proto...
|
83
|
return fmt.Sprintf("%s%04d", m.Data.Id, m.IncreByKey("equipment", detal))
|
d6d589a9
zhangqijia
feat: 增加装备接口
|
84
85
|
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
86
|
func (m *RoleModel) InitRole() {
|
8d983031
zhangqijia
loginReq uid -> t...
|
87
88
|
//init hero
h1 := pb.Hero{
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
89
|
Id: m.IncreHearByKey(1),
|
23822e2f
zhangqijia
fix: update proto...
|
90
|
RoleId: m.Data.Id,
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
91
92
93
94
|
Type: 1,
Level: 1,
ReinCount: 0,
ReinPoint: 0,
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
95
|
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
96
97
98
|
m.AddHero(&h1)
h2 := h1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
99
|
h2.Id = m.IncreHearByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
100
101
102
103
|
h2.Type = 2
m.AddHero(&h2)
h3 := h1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
104
|
h3.Id = m.IncreHearByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
105
106
107
108
|
h3.Type = 3
m.AddHero(&h3)
h4 := h1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
109
|
h4.Id = m.IncreHearByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
110
111
112
113
114
|
h4.Type = 4
m.AddHero(&h4)
//init team
t1 := pb.Team{
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
115
|
Id: m.IncreTeamByKey(1),
|
23822e2f
zhangqijia
fix: update proto...
|
116
|
RoleId: m.Data.Id,
|
8d983031
zhangqijia
loginReq uid -> t...
|
117
118
119
120
121
122
123
|
HeroId1: h1.Id,
HeroId2: h2.Id,
HeroId3: h3.Id,
}
m.AddTeam(&t1)
t2 := t1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
124
|
t2.Id = m.IncreTeamByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
125
126
127
|
m.AddTeam(&t2)
t3 := t1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
128
|
t3.Id = m.IncreTeamByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
129
130
131
|
m.AddTeam(&t3)
t4 := t1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
132
|
t4.Id = m.IncreTeamByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
133
|
m.AddTeam(&t4)
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
134
|
|
4a502dd5
zhangqijia
fix: game,account...
|
135
|
//init limit
|
495e9142
zhangqijia
fix: 增加DisConnect...
|
136
137
|
var limit uint32 = 50
m.UpdateProperties(map[string]interface{}{"clotheslimit": limit, "weaponslimit": limit, "otherlimit": limit, "jewelrylimit": limit, "materiallimit": limit}, false)
|
4a502dd5
zhangqijia
fix: game,account...
|
138
|
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
139
|
m.Update()
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
140
|
}
|
eb417b0b
zhangqijia
reactor mongo
|
141
|
|
8d983031
zhangqijia
loginReq uid -> t...
|
142
143
|
func (m *RoleModel) LoadHero() {
heros := make([]*pb.Hero, 10)
|
23822e2f
zhangqijia
fix: update proto...
|
144
|
err := mongoproxy.FindMany("hero", "roleid", m.Data.Id, &heros)
|
8d983031
zhangqijia
loginReq uid -> t...
|
145
146
147
148
149
150
|
if err != nil {
logger.Error(err)
return
}
for _, hero := range heros {
m.Heros[hero.Id] = NewHero(hero)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
151
152
153
|
}
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
154
155
|
func (m *RoleModel) LoadTeams() {
teams := make([]*pb.Team, 4)
|
23822e2f
zhangqijia
fix: update proto...
|
156
|
err := mongoproxy.FindMany("team", "roleid", m.Data.Id, &teams)
|
8d983031
zhangqijia
loginReq uid -> t...
|
157
158
159
160
|
if err != nil {
logger.Error(err)
return
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
161
|
for _, team := range teams {
|
8d983031
zhangqijia
loginReq uid -> t...
|
162
|
m.Teams[team.Id] = NewTeam(team)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
163
164
165
|
}
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
166
167
|
//加载背包数据到内存
func (m *RoleModel) LoadItems() {
|
23822e2f
zhangqijia
fix: update proto...
|
168
|
m.Items = common.StringToMapNum(m.Data.Items)
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
169
170
171
172
|
}
func (m *RoleModel) LoadEquipments() {
data := make([]*pb.Equipment, 10)
|
23822e2f
zhangqijia
fix: update proto...
|
173
|
err := mongoproxy.FindMany("equipment", "roleid", m.Data.Id, &data)
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
174
175
176
177
178
179
180
|
if err != nil {
logger.Error(err)
return
}
for _, d := range data {
m.Equipments[d.Id] = NewEquip(d)
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
181
182
|
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
183
|
func (m *RoleModel) LoadAll() {
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
184
185
|
m.LoadHero()
m.LoadTeams()
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
186
|
m.LoadItems()
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
187
|
m.LoadEquipments()
|
eb417b0b
zhangqijia
reactor mongo
|
188
189
|
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
190
191
|
func (m *RoleModel) UpdateProperty(key string, val interface{}, notify bool) {
m.UpdateProperties(map[string]interface{}{key: val}, notify)
|
4255fd8e
zhangqijia
feat: 更新字段
|
192
193
|
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
194
|
func (m *RoleModel) UpdateProperties(property map[string]interface{}, notify bool) {
|
4255fd8e
zhangqijia
feat: 更新字段
|
195
196
197
198
|
if len(property) < 1 {
return
}
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
199
|
role := &pb.Role{}
|
d35f4f81
zhangqijia
fix: 优化proto to i...
|
200
|
|
4255fd8e
zhangqijia
feat: 更新字段
|
201
202
203
204
205
206
|
ids := m.ParseFields(role.ProtoReflect(), property)
if len(ids) == 0 {
logger.Error("ParseFields err, len is 0")
return
}
|
23822e2f
zhangqijia
fix: update proto...
|
207
|
update := &pb.RoleUpdatePropertyNty{
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
208
|
Id: ids,
|
4255fd8e
zhangqijia
feat: 更新字段
|
209
210
211
|
Role: role,
}
if rsp, err := proto.Marshal(update); err != nil {
|
23822e2f
zhangqijia
fix: update proto...
|
212
|
logger.Error("id %s, err:", m.Data.Id, err)
|
4255fd8e
zhangqijia
feat: 更新字段
|
213
|
return
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
214
|
} else {
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
215
|
if m.GetConn() != nil && notify {
|
23822e2f
zhangqijia
fix: update proto...
|
216
|
m.GetConn().Send(0, uint32(pb.ProtoCode_RoleUpdatePropertyNty), rsp)
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
217
|
}
|
4255fd8e
zhangqijia
feat: 更新字段
|
218
|
}
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
219
220
|
}
|
2e0aa298
zhangqijia
update 每条连接新增一条协程...
|
221
222
223
|
func (m *RoleModel) GetAllHero() []*pb.Hero {
var h []*pb.Hero
for _, hero := range m.Heros {
|
23822e2f
zhangqijia
fix: update proto...
|
224
|
h = append(h, hero.(*HeroModel).Data)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
225
226
227
|
}
return h
}
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
228
|
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
229
|
func (m *RoleModel) GetAllTeam() []*pb.Team {
|
8d983031
zhangqijia
loginReq uid -> t...
|
230
|
var t []*pb.Team
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
231
|
for _, team := range m.Teams {
|
23822e2f
zhangqijia
fix: update proto...
|
232
|
t = append(t, team.(*TeamModel).Data)
|
8d983031
zhangqijia
loginReq uid -> t...
|
233
234
235
236
|
}
return t
}
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
237
238
239
|
func (m *RoleModel) GetEquipments() []*pb.Equipment {
var equips []*pb.Equipment
for _, e := range m.Equipments {
|
23822e2f
zhangqijia
fix: update proto...
|
240
|
equips = append(equips, e.(*EquipModel).Data)
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
241
242
243
244
|
}
return equips
}
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
245
|
func (m *RoleModel) OnRecoverTimer(now int64) {
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
246
|
m.SaveRoleData(now)
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
247
248
|
}
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
249
250
|
func (m *RoleModel) OnOfflineEvent() {
// 设置最新的登录时间
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
251
|
m.SaveRoleData(common.Timex())
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
252
253
|
}
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
254
255
|
func (m *RoleModel) SaveRoleData(now int64) {
if now > 0 && now-m.lastSaveTs < common.SaveDataInterval {
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
256
257
258
259
|
return
}
atomic.StoreInt64(&m.lastSaveTs, now)
m.Update()
|
8d983031
zhangqijia
loginReq uid -> t...
|
260
261
262
263
264
265
266
267
|
tbObjs := []components.ISchema{}
for _, tbObj := range tbObjs {
if tbObj != nil {
tbObj.Update()
}
}
|
c047d94f
zhangqijia
fix: update equip...
|
268
|
mpObjs := []SchemaMap{m.Heros, m.Teams, m.Equipments}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
269
270
271
272
273
274
275
276
|
for _, mpObj := range mpObjs {
for _, v := range mpObj {
if v != nil {
v.Update()
}
}
}
}
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
277
|
|
c8509ef6
zhangqijia
fix: notify equip...
|
278
|
func (m *RoleModel) IncrPropertyChan(key string, val int64, notify bool) {
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
279
280
|
if m.GetConn() != nil {
m.GetConn().CustomChan() <- func() {
|
c8509ef6
zhangqijia
fix: notify equip...
|
281
282
|
incr := m.IncrProperty(key, val)
m.UpdateProperty(key, incr, notify)
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
283
284
285
286
287
288
289
|
}
} else {
m.IncrProperty(key, val)
}
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
290
291
292
293
|
func (m *RoleModel) UpdatePropertyChan(key string, val interface{}, notify bool) {
if m.GetConn() != nil {
m.GetConn().CustomChan() <- func() {
m.UpdateProperties(map[string]interface{}{key: val}, notify)
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
294
295
|
}
} else {
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
296
|
m.UpdateProperties(map[string]interface{}{key: val}, notify)
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
297
298
299
|
}
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
300
301
302
|
func (m *RoleModel) SaveRoleDataChan(now int64) {
if m.GetConn() != nil {
m.GetConn().CustomChan() <- func() {
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
303
304
305
306
307
308
309
|
m.SaveRoleData(now)
}
} else {
m.SaveRoleData(now)
}
}
|