| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package rankBase
- import (
- "f1-game/internal/data"
- "time"
- cstring "github.com/cherry-game/cherry/extend/string"
- clog "github.com/cherry-game/cherry/logger"
- "github.com/cherry-game/cherry/net/parser/pomelo"
- )
- const (
- defaultShowCount = 100 // 默认显示数量
- defaultSaveInterval = 5 * time.Second // 默认数据保存间隔 5秒
- )
- // RankTable 排行榜表的接口
- type RankTable interface {
- IsChangeData() bool
- SetChangeData()
- Save2Queue()
- }
- // RankBase 排行榜基类
- type RankBase struct {
- rankID int32
- table RankTable
- }
- // Init 初始化排行榜
- func (p *RankBase) Init(
- actorBase pomelo.ActorBase,
- rankStr string,
- saveInterval time.Duration,
- loadTable func(int32) (RankTable, bool),
- ) {
- p.rankID, _ = cstring.ToInt32(rankStr)
- table, found := loadTable(p.rankID)
- if !found {
- clog.Warnf("Init rank fail, db error. rankID=%d", p.rankID)
- return
- }
- p.table = table
- if saveInterval <= 0 {
- saveInterval = defaultSaveInterval
- }
- // 添加数据库保存定时器
- actorBase.Timer().Add(saveInterval, p.saveTimer)
- }
- // RankID 获取排行榜ID
- func (p *RankBase) RankID() int32 {
- return p.rankID
- }
- // GetRankLimit 获取排行榜上限 默认上榜数量=默认显示数量 * 2
- func (p *RankBase) GetRankLimit() int {
- rankRow, found := data.Rank.GetByRankID(p.rankID)
- if !found {
- return defaultShowCount * 2
- }
- return rankRow.MaxRankCount
- }
- // 获取显示数量
- func (p RankBase) GetShowCount() int32 {
- rankRow, found := data.Rank.GetByRankID(p.rankID)
- if !found {
- return defaultShowCount
- }
- return rankRow.ShowCount
- }
- // 获取显示数量
- func (p RankBase) GetMinRankValue() int64 {
- rankRow, found := data.Rank.GetByRankID(p.rankID)
- if !found {
- return 0
- }
- return rankRow.MinRankValue
- }
- // MarkChange 标记数据已变更
- func (p *RankBase) MarkChange() {
- p.table.SetChangeData()
- }
- // saveTimer 定时保存
- func (p *RankBase) saveTimer() {
- if p.table.IsChangeData() {
- p.table.Save2Queue()
- clog.Debugf("[saveTimer] save rank data to db. rankID=%d", p.rankID)
- }
- }
- func (p *RankBase) OnStop() {
- p.saveTimer()
- clog.Debugf("[OnStop] rank save to db. rankID=%d", p.rankID)
- }
|