Commit 2799b096b961e3f9daab7a91920361d474f7c5a6
1 parent
60c545c8
Exists in
master
and in
1 other branch
feat✨:房间排行榜改为支持多个排行榜
Showing
5 changed files
with
26 additions
and
24 deletions
Show diff stats
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 | ... | ... |