awardList.go 986 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package rank
  2. import (
  3. "sync"
  4. "time"
  5. item "bet24.com/servers/micros/item_inventory/proto"
  6. )
  7. var Awards *AwardList
  8. type AwardList struct {
  9. Awards []RankAwardInfo
  10. lock *sync.RWMutex
  11. }
  12. func NewAwardList() *AwardList {
  13. obj := new(AwardList)
  14. obj.lock = &sync.RWMutex{}
  15. return obj
  16. }
  17. func (al *AwardList) Run() {
  18. al.refreshData()
  19. }
  20. func (al *AwardList) refreshData() {
  21. go al.doRefresh()
  22. time.AfterFunc(3*time.Second, al.refreshData)
  23. }
  24. func (al *AwardList) doRefresh() {
  25. list := getAwardList()
  26. al.lock.Lock()
  27. defer al.lock.Unlock()
  28. al.Awards = list
  29. }
  30. // 根据排名获取奖励信息
  31. func (al *AwardList) getAwards(rankType, rank int) []item.ItemPack {
  32. al.lock.RLock()
  33. list := al.Awards
  34. al.lock.RUnlock()
  35. for _, v := range list {
  36. if v.RankType != rankType || v.Rank != rank {
  37. continue
  38. }
  39. return v.Items
  40. }
  41. return nil
  42. }
  43. // 获取奖励列表
  44. func (al *AwardList) getList() []RankAwardInfo {
  45. al.lock.RLock()
  46. defer al.lock.RUnlock()
  47. return al.Awards
  48. }