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