Commit 2799b096b961e3f9daab7a91920361d474f7c5a6

Authored by 王家文
1 parent 60c545c8
Exists in master and in 1 other branch dev-wjw

feat✨:房间排行榜改为支持多个排行榜

service/roomrank/dto-record.go
... ... @@ -38,7 +38,7 @@ func (d *RecordGetSettleAward) MysqlInfo(suffix string) *svmysql.MysqlInfo {
38 38 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_RECORD_SETTLEAWARD
39 39 return &svmysql.MysqlInfo{
40 40 DbMysql: svconst.DbCommon,
41   - TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.TopType),
  41 + TableName: fmt.Sprintf("%s_%s_%d_%d", tableName, suffix, d.TopType, d.ActivityId),
42 42 }
43 43 }
44 44  
... ... @@ -62,7 +62,7 @@ func (d *RecordAddScore) MysqlInfo(suffix string) *svmysql.MysqlInfo {
62 62 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_RECORD_ADDSCORE
63 63 return &svmysql.MysqlInfo{
64 64 DbMysql: svconst.DbCommon,
65   - TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.TopType),
  65 + TableName: fmt.Sprintf("%s_%s_%d_%d", tableName, suffix, d.TopType, d.ActivityId),
66 66 }
67 67 }
68 68  
... ...
service/roomrank/dto-room.go
... ... @@ -12,6 +12,7 @@ import (
12 12 // Room 房间排行持久数据
13 13 type Room struct {
14 14 Id int64 `gorm:"column:id;primaryKey;comment:房间唯一ID"`
  15 + TopType int `gorm:"comment:排行榜类型"`
15 16 ActivityId int64 `gorm:"comment:活动ID"`
16 17 ConfigId int `gorm:"comment:房间配置ID"`
17 18  
... ... @@ -30,7 +31,7 @@ func (d *Room) MysqlInfo(suffix string) *svmysql.MysqlInfo {
30 31 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_ROOM
31 32 return &svmysql.MysqlInfo{
32 33 DbMysql: svconst.DbCommon,
33   - TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.ActivityId),
  34 + TableName: fmt.Sprintf("%s_%s_%d_%d", tableName, suffix, d.TopType, d.ActivityId),
34 35 }
35 36 }
36 37  
... ...
service/roomrank/handle.go
... ... @@ -53,7 +53,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
53 53 player.Icon = req.PlayerIcon
54 54  
55 55 // 采用分布式锁
56   - lockKey := getLockKey(gameId, config.Id)
  56 + lockKey := getLockKey(gameId, req.TopType, config.Id)
57 57 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
58 58 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
59 59 if lock.Err != nil {
... ... @@ -63,7 +63,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
63 63 defer lock.Release()
64 64  
65 65 // 尝试判断结算
66   - hasSettleChange := TrySettle(gameId, player, config)
  66 + hasSettleChange := TrySettle(gameId, req.TopType, player, config)
67 67  
68 68 if hasSettleChange {
69 69 SavePlayer(gameId, player)
... ... @@ -80,7 +80,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
80 80 }
81 81  
82 82 // 尝试加入房间
83   - room, hasRoom := TryGetRoom(gameId, player, config, playerLevel)
  83 + room, hasRoom := TryGetRoom(gameId, req.TopType, player, config, playerLevel)
84 84  
85 85 if !hasRoom {
86 86 code = code_msg.RECODE_MERGE_CONFIG_ERROR
... ... @@ -115,7 +115,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r
115 115 player.Icon = req.PlayerIcon
116 116  
117 117 // 采用分布式锁
118   - lockKey := getLockKey(gameId, config.Id)
  118 + lockKey := getLockKey(gameId, req.TopType, config.Id)
119 119 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
120 120 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
121 121 if lock.Err != nil {
... ... @@ -125,7 +125,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r
125 125 defer lock.Release()
126 126  
127 127 // 尝试判断结算
128   - _ = TrySettle(gameId, player, config)
  128 + _ = TrySettle(gameId, req.TopType, player, config)
129 129 if !player.SettleHas() {
130 130 code = code_msg.RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR
131 131 return
... ... @@ -171,7 +171,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
171 171 player.Icon = req.PlayerIcon
172 172  
173 173 // 采用分布式锁
174   - lockKey := getLockKey(gameId, config.Id)
  174 + lockKey := getLockKey(gameId, req.TopType, config.Id)
175 175 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
176 176 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
177 177 if lock.Err != nil {
... ... @@ -181,7 +181,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
181 181 defer lock.Release()
182 182  
183 183 // 尝试判断结算
184   - hasSettleChange := TrySettle(gameId, player, config)
  184 + hasSettleChange := TrySettle(gameId, req.TopType, player, config)
185 185 if hasSettleChange {
186 186 SavePlayer(gameId, player)
187 187 }
... ... @@ -199,7 +199,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
199 199 }
200 200  
201 201 // 尝试加入房间
202   - room, hasRoom := TryGetRoom(gameId, player, config, playerLevel)
  202 + room, hasRoom := TryGetRoom(gameId, req.TopType, player, config, playerLevel)
203 203  
204 204 // 房间排行增加积分
205 205 oldScore, newScore := ChangePlayerScore(room, player, req.AddScore)
... ...
service/roomrank/logic.go
... ... @@ -8,12 +8,12 @@ import (
8 8 "fmt"
9 9 )
10 10  
11   -func getLockKey(gameId string, activityId int64) string {
12   - return fmt.Sprintf("%s:lock:roomrank:%s:%d", svconst.REDIS_CACHEP_REFIX, gameId, activityId)
  11 +func getLockKey(gameId string, topType int, activityId int64) string {
  12 + return fmt.Sprintf("%s:lock:roomrank:%s:%d:%d", svconst.REDIS_CACHEP_REFIX, gameId, topType, activityId)
13 13 }
14 14  
15 15 // TrySettle 尝试判断结算
16   -func TrySettle(gameId string, player *Player, config *confroomrank.ActivityConfig) (hasChange bool) {
  16 +func TrySettle(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig) (hasChange bool) {
17 17 hasChange = false
18 18 if player.SettleActivityId == config.Id {
19 19 return
... ... @@ -26,7 +26,7 @@ func TrySettle(gameId string, player *Player, config *confroomrank.ActivityConfi
26 26 }
27 27 fmt.Println(zjson.Str(player))
28 28 // 查找玩家所在的房间
29   - room, hasRoom := LoadRoom(gameId, player.ActivityId, player.RoomUid)
  29 + room, hasRoom := LoadRoom(gameId, topType, player.ActivityId, player.RoomUid)
30 30 if !hasRoom {
31 31 return
32 32 }
... ...
service/roomrank/room.go
... ... @@ -29,8 +29,8 @@ func SaveRoom(gameId string, room *Room) {
29 29 }
30 30  
31 31 // LoadRoom 获取数据
32   -func LoadRoom(gameId string, activityId int64, roomUid int64) (room *Room, has bool) {
33   - room = &Room{Id: roomUid, ActivityId: activityId}
  32 +func LoadRoom(gameId string, topType int, activityId int64, roomUid int64) (room *Room, has bool) {
  33 + room = &Room{Id: roomUid, TopType: topType, ActivityId: activityId}
34 34 if roomUid == 0 {
35 35 has = false
36 36 return
... ... @@ -48,8 +48,9 @@ func LoadRoom(gameId string, activityId int64, roomUid int64) (room *Room, has b
48 48 return
49 49 }
50 50  
51   -func CreateRoom(gameId string, activityId int64, roomConfigId int) (room *Room, has bool) {
  51 +func CreateRoom(gameId string, topType int, activityId int64, roomConfigId int) (room *Room, has bool) {
52 52 room = new(Room)
  53 + room.TopType = topType
53 54 room.ActivityId = activityId
54 55 room.ConfigId = roomConfigId
55 56 room.Closed = false
... ... @@ -69,8 +70,8 @@ func CreateRoom(gameId string, activityId int64, roomConfigId int) (room *Room,
69 70 }
70 71  
71 72 // FindRoom 查找
72   -func FindRoom(gameId string, activityId int64, roomConfigId int) (rooms []*Room, has bool) {
73   - roomDemo := &Room{ActivityId: activityId}
  73 +func FindRoom(gameId string, topType int, activityId int64, roomConfigId int) (rooms []*Room, has bool) {
  74 + roomDemo := &Room{TopType: topType, ActivityId: activityId}
74 75 tryInitRoom(gameId, roomDemo)
75 76 info := roomDemo.MysqlInfo(gameId)
76 77  
... ... @@ -84,14 +85,14 @@ func FindRoom(gameId string, activityId int64, roomConfigId int) (rooms []*Room,
84 85 }
85 86  
86 87 // TryGetRoom 尝试获取房间
87   -func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConfig, playerLevel int) (room *Room, hasRoom bool) {
  88 +func TryGetRoom(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig, playerLevel int) (room *Room, hasRoom bool) {
88 89 hasRoom = false
89 90 if player.ActivityId != config.Id {
90 91 player.ActivityId = config.Id
91 92 player.RoomUid = 0
92 93 }
93 94 // 查找玩家所在的房间
94   - room, hasRoom = LoadRoom(gameId, config.Id, player.RoomUid)
  95 + room, hasRoom = LoadRoom(gameId, topType, config.Id, player.RoomUid)
95 96 if hasRoom {
96 97 if confRoom, hasConfRoom := config.Room[room.ConfigId]; hasConfRoom {
97 98 TryCloseRoom(gameId, room, confRoom)
... ... @@ -115,7 +116,7 @@ func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConf
115 116 return
116 117 }
117 118 // 数据库查找合适条件的房间列表
118   - rooms, has := FindRoom(gameId, config.Id, roomConfigId)
  119 + rooms, has := FindRoom(gameId, topType, config.Id, roomConfigId)
119 120 if has {
120 121 for i := 0; i < len(rooms); i++ {
121 122 roomTemp := rooms[i]
... ... @@ -137,7 +138,7 @@ func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConf
137 138 PlayerJoinRoom(room, player)
138 139 } else {
139 140 // 如果没有合适条件的房间 创建一个
140   - roomCreate, hasCreate := CreateRoom(gameId, config.Id, roomConfigId)
  141 + roomCreate, hasCreate := CreateRoom(gameId, topType, config.Id, roomConfigId)
141 142 if hasCreate {
142 143 room = roomCreate
143 144  
... ...