排名改变事件实现

This commit is contained in:
kercylan98 2023-05-30 15:21:44 +08:00
parent 360f07d9ae
commit 4e75282d01
2 changed files with 15 additions and 0 deletions

View File

@ -50,6 +50,13 @@ func (slf *RankingList[CompetitorID, Score]) Competitor(competitorId CompetitorI
} else {
slf.competitor(competitorId, score, rank, len(slf.scores)-1)
}
if len(slf.rankChangeEventHandles) > 0 {
newRank, err := slf.GetRank(competitorId)
if err != nil {
panic(err)
}
slf.OnRankChangeEvent(competitorId, rank, newRank, v, score)
}
} else {
if slf.rankCount > 0 && len(slf.scores) >= slf.rankCount {
last := slf.scores[len(slf.scores)-1]
@ -58,6 +65,13 @@ func (slf *RankingList[CompetitorID, Score]) Competitor(competitorId CompetitorI
}
}
slf.competitor(competitorId, score, 0, len(slf.scores)-1)
if len(slf.rankChangeEventHandles) > 0 {
newRank, err := slf.GetRank(competitorId)
if err != nil {
panic(err)
}
slf.OnRankChangeEvent(competitorId, newRank, newRank, score, score)
}
}
}

View File

@ -29,6 +29,7 @@ type RankingList[CompetitorID comparable, Score generic.Ordered] interface {
Clear()
// RegRankChangeEvent 排名改变时将立即执行注册的事件处理函数
// - 当竞争者为新加入时oldRank 和 oldScore 均与 newRank 和 newScore 相同
RegRankChangeEvent(handle RankChangeEventHandle[CompetitorID, Score])
OnRankChangeEvent(competitorId CompetitorID, oldRank, newRank int, oldScore, newScore Score)
}