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 {
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
25
|
data := &pb.Role{Uid: uid, Incres: make(map[string]int64)}
|
1584eb4b
zhangqijia
修复创建唯一索引的bug
|
26
|
|
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 {
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
45
|
data := &pb.Role{Id: id, Incres: make(map[string]int64)}
|
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
|
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)
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
64
65
66
67
68
69
70
71
|
return v
}
func (m *RoleModel) IncreHearByKey(detal int64) string {
return fmt.Sprintf("%s%04d", m.Role.Id, m.IncreByKey("hero", detal))
}
func (m *RoleModel) IncreTeamByKey(detal int64) string {
return fmt.Sprintf("%s%02d", m.Role.Id, m.IncreByKey("team", detal))
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
72
73
|
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
74
|
func (m *RoleModel) InitRole() {
|
8d983031
zhangqijia
loginReq uid -> t...
|
75
76
|
//init hero
h1 := pb.Hero{
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
77
|
Id: m.IncreHearByKey(1),
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
78
79
80
81
82
|
RoleId: m.Role.Id,
Type: 1,
Level: 1,
ReinCount: 0,
ReinPoint: 0,
|
8d983031
zhangqijia
loginReq uid -> t...
|
83
|
Equipments: "",
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
84
|
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
85
86
87
|
m.AddHero(&h1)
h2 := h1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
88
|
h2.Id = m.IncreHearByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
89
90
91
92
|
h2.Type = 2
m.AddHero(&h2)
h3 := h1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
93
|
h3.Id = m.IncreHearByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
94
95
96
97
|
h3.Type = 3
m.AddHero(&h3)
h4 := h1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
98
|
h4.Id = m.IncreHearByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
99
100
101
102
103
|
h4.Type = 4
m.AddHero(&h4)
//init team
t1 := pb.Team{
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
104
|
Id: m.IncreTeamByKey(1),
|
8d983031
zhangqijia
loginReq uid -> t...
|
105
106
107
108
109
110
111
112
|
RoleId: m.Role.Id,
HeroId1: h1.Id,
HeroId2: h2.Id,
HeroId3: h3.Id,
}
m.AddTeam(&t1)
t2 := t1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
113
|
t2.Id = m.IncreTeamByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
114
115
116
|
m.AddTeam(&t2)
t3 := t1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
117
|
t3.Id = m.IncreTeamByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
118
119
120
|
m.AddTeam(&t3)
t4 := t1
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
121
|
t4.Id = m.IncreTeamByKey(1)
|
8d983031
zhangqijia
loginReq uid -> t...
|
122
|
m.AddTeam(&t4)
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
123
124
|
m.Update()
|
ee23102d
zhangqijia
支持mongo, grpc接服务器
|
125
|
}
|
eb417b0b
zhangqijia
reactor mongo
|
126
|
|
8d983031
zhangqijia
loginReq uid -> t...
|
127
128
|
func (m *RoleModel) LoadHero() {
heros := make([]*pb.Hero, 10)
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
129
|
err := mongoproxy.FindMany("hero", "roleid", m.Role.Id, &heros)
|
8d983031
zhangqijia
loginReq uid -> t...
|
130
131
132
133
134
135
|
if err != nil {
logger.Error(err)
return
}
for _, hero := range heros {
m.Heros[hero.Id] = NewHero(hero)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
136
137
138
|
}
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
139
140
|
func (m *RoleModel) LoadTeams() {
teams := make([]*pb.Team, 4)
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
141
|
err := mongoproxy.FindMany("team", "roleid", m.Role.Id, &teams)
|
8d983031
zhangqijia
loginReq uid -> t...
|
142
143
144
145
|
if err != nil {
logger.Error(err)
return
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
146
|
for _, team := range teams {
|
8d983031
zhangqijia
loginReq uid -> t...
|
147
|
m.Teams[team.Id] = NewTeam(team)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
148
149
150
|
}
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
151
|
func (m *RoleModel) LoadAll() {
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
152
153
|
m.LoadHero()
m.LoadTeams()
|
eb417b0b
zhangqijia
reactor mongo
|
154
155
|
}
|
4255fd8e
zhangqijia
feat: 更新字段
|
156
|
func (m *RoleModel) UpdateProperty(conn components.IConnection, key string, val interface{}, notify bool) {
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
157
|
m.UpdateProperties(conn, map[string]interface{}{key: val}, notify)
|
4255fd8e
zhangqijia
feat: 更新字段
|
158
159
160
161
162
163
164
|
}
func (m *RoleModel) UpdateProperties(conn components.IConnection, property map[string]interface{}, notify bool) {
if len(property) < 1 {
return
}
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
165
|
role := &pb.Role{}
|
4255fd8e
zhangqijia
feat: 更新字段
|
166
167
168
169
170
171
172
|
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...
|
173
|
Id: ids,
|
4255fd8e
zhangqijia
feat: 更新字段
|
174
175
176
177
178
|
Role: role,
}
if rsp, err := proto.Marshal(update); err != nil {
logger.Error("id %s, err:", m.Role.Id, err)
return
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
179
|
} else {
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
180
|
if conn != nil && notify {
|
d771e9e3
zhangqijia
fix: 优化FieldByNam...
|
181
182
|
conn.Send(0, uint32(pb.ProtoCode_UpdateRolePropertyRsp), rsp)
}
|
4255fd8e
zhangqijia
feat: 更新字段
|
183
|
}
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
184
185
|
}
|
2e0aa298
zhangqijia
update 每条连接新增一条协程...
|
186
187
188
|
func (m *RoleModel) GetAllHero() []*pb.Hero {
var h []*pb.Hero
for _, hero := range m.Heros {
|
8d983031
zhangqijia
loginReq uid -> t...
|
189
|
h = append(h, hero.(*HeroModel).Hero)
|
6f0d72bd
zhangqijia
定时器功能完善优化
|
190
191
192
|
}
return h
}
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
193
|
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
194
|
func (m *RoleModel) GetAllTeam() []*pb.Team {
|
8d983031
zhangqijia
loginReq uid -> t...
|
195
|
var t []*pb.Team
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
196
197
|
for _, team := range m.Teams {
t = append(t, team.(*TeamModel).Team)
|
8d983031
zhangqijia
loginReq uid -> t...
|
198
199
200
201
|
}
return t
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
202
203
|
func (m *RoleModel) AddHero(hero *pb.Hero) {
h := NewHero(hero)
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
204
|
h.Create()
|
8d983031
zhangqijia
loginReq uid -> t...
|
205
206
207
208
209
210
211
212
213
|
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: 增加上阵下阵协议,增加...
|
214
215
216
217
218
219
220
221
222
223
|
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 在一条...
|
224
|
func (m *RoleModel) OnRecoverTimer(now int64) {
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
225
|
m.SaveRoleData(now)
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
226
227
|
}
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
228
229
|
func (m *RoleModel) OnOfflineEvent() {
// 设置最新的登录时间
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
230
|
m.SaveRoleData(common.Timex())
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
231
232
|
}
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
233
234
|
func (m *RoleModel) SaveRoleData(now int64) {
if now > 0 && now-m.lastSaveTs < common.SaveDataInterval {
|
38dd96b4
zhangqijia
定时器+网络数据 peer 在一条...
|
235
236
237
238
|
return
}
atomic.StoreInt64(&m.lastSaveTs, now)
m.Update()
|
8d983031
zhangqijia
loginReq uid -> t...
|
239
240
241
242
243
244
245
246
|
tbObjs := []components.ISchema{}
for _, tbObj := range tbObjs {
if tbObj != nil {
tbObj.Update()
}
}
|
0ce6c418
zhangqijia
fix: 修复 bug RoleM...
|
247
248
249
250
251
252
253
254
255
|
mpObjs := []SchemaMap{m.Heros, m.Teams}
for _, mpObj := range mpObjs {
for _, v := range mpObj {
if v != nil {
v.Update()
}
}
}
}
|
8aaf28dd
zhangqijia
fix: 修复gm系统修改role...
|
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
|
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)
}
}
|