Blame view

models/role.go 2.23 KB
ee23102d   zhangqijia   支持mongo, grpc接服务器
1
2
3
  package models
  
  import (
eb417b0b   zhangqijia   reactor mongo
4
  	"fmt"
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
5
  	"pro2d/common"
765431a4   zhangqijia   增加schema接口, 抽象 mo...
6
7
  	"pro2d/common/db"
  	"pro2d/common/logger"
7f269318   zhangqijia   add pb.go; 添加关闭连接...
8
  	"pro2d/pb"
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
9
  	"pro2d/utils"
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
10
  	"sync/atomic"
ee23102d   zhangqijia   支持mongo, grpc接服务器
11
12
13
  )
  
  type RoleModel struct {
765431a4   zhangqijia   增加schema接口, 抽象 mo...
14
  	*Schema
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
15
  	Role  *pb.Role
eb417b0b   zhangqijia   reactor mongo
16
  	Heros HeroMap
1584eb4b   zhangqijia   修复创建唯一索引的bug
17
  	Teams *TeamModel
765431a4   zhangqijia   增加schema接口, 抽象 mo...
18
19
  	Equip *EquipModel
  	Prop  *PropModel
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
20
21
  
  	lastSaveTs  int64
ee23102d   zhangqijia   支持mongo, grpc接服务器
22
23
  }
  
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
24
  func RoleExistByUid(uid string) *RoleModel {
1584eb4b   zhangqijia   修复创建唯一索引的bug
25
26
27
  	data := &pb.Role{Uid: uid}
  
  	if err := db.FindOne(db.GetBsonM("uid", uid), data); err != nil {
cad2b7f3   zhangqijia   reactor: 重构目录, 重构...
28
  		logger.Error("Role exist err: %v", err)
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
29
  		return nil
ee23102d   zhangqijia   支持mongo, grpc接服务器
30
  	}
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
31
  
6f0d72bd   zhangqijia   定时器功能完善优化
32
33
  
  	r := &RoleModel{
765431a4   zhangqijia   增加schema接口, 抽象 mo...
34
  		Schema: NewSchema(data.Id, data),
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
35
36
37
  		Role:   data,
  		Heros:  make(HeroMap),
  		Teams:  new(TeamModel),
765431a4   zhangqijia   增加schema接口, 抽象 mo...
38
39
  		Equip:  new(EquipModel),
  		Prop:   new(PropModel),
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
40
  	}
6f0d72bd   zhangqijia   定时器功能完善优化
41
42
  	r.LoadAll()
  	return r
ee23102d   zhangqijia   支持mongo, grpc接服务器
43
44
  }
  
33ea26ab   zhangqijia   使用schema封装mongo
45
  func NewRole(id string) *RoleModel {
1584eb4b   zhangqijia   修复创建唯一索引的bug
46
  	data := &pb.Role{Id: id}
ee23102d   zhangqijia   支持mongo, grpc接服务器
47
  	m := &RoleModel{
765431a4   zhangqijia   增加schema接口, 抽象 mo...
48
  		Schema: NewSchema(id, data),
0e5d52de   zhangqijia   reactor: 重构底层框架1.0
49
50
51
  		Role:   data,
  		Heros:  make(HeroMap),
  		Teams:  new(TeamModel),
765431a4   zhangqijia   增加schema接口, 抽象 mo...
52
53
  		Equip:  new(EquipModel),
  		Prop:   new(PropModel),
ee23102d   zhangqijia   支持mongo, grpc接服务器
54
  	}
ee23102d   zhangqijia   支持mongo, grpc接服务器
55
56
57
  	return m
  }
  
6f0d72bd   zhangqijia   定时器功能完善优化
58
  func (m *RoleModel) LoadHero() {
33ea26ab   zhangqijia   使用schema封装mongo
59
  	m.Heros["test"] = NewHero("")
6f0d72bd   zhangqijia   定时器功能完善优化
60
  	m.Heros["test"].Hero = &pb.Hero{
33ea26ab   zhangqijia   使用schema封装mongo
61
  		Id:         "1",
6f0d72bd   zhangqijia   定时器功能完善优化
62
63
64
65
66
67
68
  		RoleId:     m.Role.Id,
  		Type:       1,
  		Level:      1,
  		ReinCount:  0,
  		ReinPoint:  0,
  		Equipments: "123123",
  	}
ee23102d   zhangqijia   支持mongo, grpc接服务器
69
  }
eb417b0b   zhangqijia   reactor mongo
70
  
6f0d72bd   zhangqijia   定时器功能完善优化
71
  func (m *RoleModel) LoadTeams() {
33ea26ab   zhangqijia   使用schema封装mongo
72
  	m.Teams = NewTeam("0")
6f0d72bd   zhangqijia   定时器功能完善优化
73
  	m.Teams.Team = &pb.Team{
33ea26ab   zhangqijia   使用schema封装mongo
74
  		Id:      "1",
6f0d72bd   zhangqijia   定时器功能完善优化
75
76
77
78
79
  		HeroIds: "1",
  	}
  }
  
  func (m *RoleModel) LoadEquips() {
33ea26ab   zhangqijia   使用schema封装mongo
80
  	m.Equip = NewEquip("0")
6f0d72bd   zhangqijia   定时器功能完善优化
81
  	m.Equip.Equip = &pb.Equipment{
33ea26ab   zhangqijia   使用schema封装mongo
82
  		Id:           "0",
6f0d72bd   zhangqijia   定时器功能完善优化
83
84
85
86
87
88
89
90
91
92
93
  		RoleId:       m.Role.Id,
  		Type:         0,
  		Equip:        false,
  		EnhanceLevel: false,
  	}
  }
  
  func (m *RoleModel) LoadAll()  {
  	m.LoadHero()
  	m.LoadTeams()
  	m.LoadEquips()
eb417b0b   zhangqijia   reactor mongo
94
95
  }
  
7f269318   zhangqijia   add pb.go; 添加关闭连接...
96
97
98
  func (m *RoleModel) updateProperty(property map[string]interface{}) {
  }
  
eb417b0b   zhangqijia   reactor mongo
99
  func (m *RoleModel) AddHero(hero *pb.Hero) {
3592dfd3   zhangqijia   重构models, 索引唯一索引
100
101
  	h := NewHero(hero.Id)
  	h.Hero = hero
eb417b0b   zhangqijia   reactor mongo
102
  	h.Create()
33ea26ab   zhangqijia   使用schema封装mongo
103
  	m.Heros[fmt.Sprintf("%s%s", m.Role.Id, h.Hero.Id)] = h
6f0d72bd   zhangqijia   定时器功能完善优化
104
105
  }
  
2e0aa298   zhangqijia   update 每条连接新增一条协程...
106
107
108
109
  func (m *RoleModel) GetAllHero() []*pb.Hero {
  	var h []*pb.Hero
  	for _, hero := range m.Heros {
  		h = append(h, hero.Hero)
6f0d72bd   zhangqijia   定时器功能完善优化
110
111
112
  	}
  	return h
  }
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
113
114
115
116
117
  
  func (m *RoleModel) OnRecoverTimer(now int64) {
  	m.saveRoleData(now)
  }
  
7f269318   zhangqijia   add pb.go; 添加关闭连接...
118
119
120
121
122
  func (m *RoleModel) OnOfflineEvent() {
  	// 设置最新的登录时间
  	m.saveRoleData(utils.Timex())
  }
  
38dd96b4   zhangqijia   定时器+网络数据 peer 在一条...
123
124
125
126
127
128
129
  func (m *RoleModel) saveRoleData(now int64) {
  	if now - m.lastSaveTs < common.SaveDataInterval {
  		return
  	}
  	atomic.StoreInt64(&m.lastSaveTs, now)
  	m.Update()
  }