Blame view

models/role.go 3.39 KB
ee23102d   zhangqijia   支持mongo, grpc接服务器
1
2
3
  package models
  
  import (
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
4
  	"pro2d/common"
8d983031   zhangqijia   loginReq uid -> t...
5
  	"pro2d/common/components"
436e0af4   zhangqijia   reactor: dir; Ac...
6
  	"pro2d/common/db/mongoproxy"
765431a4   zhangqijia   增加schema接口, 抽象 mo...
7
  	"pro2d/common/logger"
7f269318   zhangqijia   add pb.go; 添加关闭连接...
8
  	"pro2d/pb"
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
9
  	"sync/atomic"
ee23102d   zhangqijia   支持mongo, grpc接服务器
10
11
12
  )
  
  type RoleModel struct {
8d983031   zhangqijia   loginReq uid -> t...
13
  	components.ISchema
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
14
  	Role  *pb.Role
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
15
16
  	Heros SchemaMap
  	Teams SchemaMap
765431a4   zhangqijia   增加schema接口, 抽象 mo...
17
  	Prop  *PropModel
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
18
  
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
19
  	lastSaveTs int64
ee23102d   zhangqijia   支持mongo, grpc接服务器
20
21
  }
  
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
22
  func RoleExistByUid(uid string) *RoleModel {
1584eb4b   zhangqijia   修复创建唯一索引的bug
23
24
  	data := &pb.Role{Uid: uid}
  
436e0af4   zhangqijia   reactor: dir; Ac...
25
  	if err := mongoproxy.FindOne(mongoproxy.GetBsonM("uid", uid), data); err != nil {
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
26
  		logger.Error("Role exist err: %v", err)
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
27
  		return nil
ee23102d   zhangqijia   支持mongo, grpc接服务器
28
  	}
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
29
  
6f0d72bd   zhangqijia   定时器功能完善优化
30
  	r := &RoleModel{
8d983031   zhangqijia   loginReq uid -> t...
31
  		ISchema: NewSchema(data.Id, data),
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
32
33
34
35
  		Role:    data,
  		Heros:   make(SchemaMap),
  		Teams:   make(SchemaMap),
  		Prop:    new(PropModel),
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
36
  	}
6f0d72bd   zhangqijia   定时器功能完善优化
37
38
  	r.LoadAll()
  	return r
ee23102d   zhangqijia   支持mongo, grpc接服务器
39
40
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
41
  func NewRole(id string) *RoleModel {
1584eb4b   zhangqijia   修复创建唯一索引的bug
42
  	data := &pb.Role{Id: id}
ee23102d   zhangqijia   支持mongo, grpc接服务器
43
  	m := &RoleModel{
8d983031   zhangqijia   loginReq uid -> t...
44
  		ISchema: NewSchema(id, data),
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
45
46
47
  		Role:    data,
  		Heros:   make(SchemaMap),
  		Teams:   make(SchemaMap),
ee23102d   zhangqijia   支持mongo, grpc接服务器
48
  	}
ee23102d   zhangqijia   支持mongo, grpc接服务器
49
50
51
  	return m
  }
  
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
52
  func (m *RoleModel) InitRole() {
8d983031   zhangqijia   loginReq uid -> t...
53
54
55
  	//init hero
  	h1 := pb.Hero{
  		Id:         common.SnowFlack.NextValStr(),
6f0d72bd   zhangqijia   定时器功能完善优化
56
57
58
59
60
  		RoleId:     m.Role.Id,
  		Type:       1,
  		Level:      1,
  		ReinCount:  0,
  		ReinPoint:  0,
8d983031   zhangqijia   loginReq uid -> t...
61
  		Equipments: "",
6f0d72bd   zhangqijia   定时器功能完善优化
62
  	}
8d983031   zhangqijia   loginReq uid -> t...
63
64
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
  	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接服务器
101
  }
eb417b0b   zhangqijia   reactor mongo
102
  
8d983031   zhangqijia   loginReq uid -> t...
103
104
105
106
107
108
109
110
111
  func (m *RoleModel) LoadHero() {
  	heros := make([]*pb.Hero, 10)
  	err := mongoproxy.FindMany("hero", "role_id", m.Role.Id, &heros)
  	if err != nil {
  		logger.Error(err)
  		return
  	}
  	for _, hero := range heros {
  		m.Heros[hero.Id] = NewHero(hero)
6f0d72bd   zhangqijia   定时器功能完善优化
112
113
114
  	}
  }
  
8d983031   zhangqijia   loginReq uid -> t...
115
116
117
118
119
120
121
  func (m *RoleModel) LoadTeams() {
  	teams := make([]*pb.Team, 4)
  	err := mongoproxy.FindMany("hero", "role_id", m.Role.Id, &teams)
  	if err != nil {
  		logger.Error(err)
  		return
  	}
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
122
  	for _, team := range teams {
8d983031   zhangqijia   loginReq uid -> t...
123
  		m.Teams[team.Id] = NewTeam(team)
6f0d72bd   zhangqijia   定时器功能完善优化
124
125
126
  	}
  }
  
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
127
  func (m *RoleModel) LoadAll() {
6f0d72bd   zhangqijia   定时器功能完善优化
128
129
  	m.LoadHero()
  	m.LoadTeams()
eb417b0b   zhangqijia   reactor mongo
130
131
  }
  
7f269318   zhangqijia   add pb.go; 添加关闭连接...
132
133
134
  func (m *RoleModel) updateProperty(property map[string]interface{}) {
  }
  
2e0aa298   zhangqijia   update 每条连接新增一条协程...
135
136
137
  func (m *RoleModel) GetAllHero() []*pb.Hero {
  	var h []*pb.Hero
  	for _, hero := range m.Heros {
8d983031   zhangqijia   loginReq uid -> t...
138
  		h = append(h, hero.(*HeroModel).Hero)
6f0d72bd   zhangqijia   定时器功能完善优化
139
140
141
  	}
  	return h
  }
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
142
  
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
143
  func (m *RoleModel) GetAllTeam() []*pb.Team {
8d983031   zhangqijia   loginReq uid -> t...
144
  	var t []*pb.Team
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
145
146
  	for _, team := range m.Teams {
  		t = append(t, team.(*TeamModel).Team)
8d983031   zhangqijia   loginReq uid -> t...
147
148
149
150
  	}
  	return t
  }
  
8d983031   zhangqijia   loginReq uid -> t...
151
152
  func (m *RoleModel) AddHero(hero *pb.Hero) {
  	h := NewHero(hero)
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
153
  	h.Create()
8d983031   zhangqijia   loginReq uid -> t...
154
155
156
157
158
159
160
161
162
  	m.Heros[hero.Id] = h
  }
  
  func (m *RoleModel) AddTeam(team *pb.Team) {
  	t := NewTeam(team)
  	t.Create()
  	m.Teams[team.Id] = t
  }
  
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
163
164
165
166
  func (m *RoleModel) OnRecoverTimer(now int64) {
  	m.saveRoleData(now)
  }
  
7f269318   zhangqijia   add pb.go; 添加关闭连接...
167
168
  func (m *RoleModel) OnOfflineEvent() {
  	// 设置最新的登录时间
29a163be   zhangqijia   fix: CreateReq ui...
169
  	m.saveRoleData(common.Timex())
7f269318   zhangqijia   add pb.go; 添加关闭连接...
170
171
  }
  
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
172
  func (m *RoleModel) saveRoleData(now int64) {
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
173
  	if now-m.lastSaveTs < common.SaveDataInterval {
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
174
175
176
177
  		return
  	}
  	atomic.StoreInt64(&m.lastSaveTs, now)
  	m.Update()
8d983031   zhangqijia   loginReq uid -> t...
178
179
180
181
182
183
184
185
  
  	tbObjs := []components.ISchema{}
  	for _, tbObj := range tbObjs {
  		if tbObj != nil {
  			tbObj.Update()
  		}
  	}
  
0ce6c418   zhangqijia   fix: 修复 bug RoleM...
186
187
188
189
190
191
192
193
194
  	mpObjs := []SchemaMap{m.Heros, m.Teams}
  	for _, mpObj := range mpObjs {
  		for _, v := range mpObj {
  			if v != nil {
  				v.Update()
  			}
  		}
  	}
  }