signinmgr.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package signin
  2. import (
  3. "bet24.com/log"
  4. item "bet24.com/servers/micros/item_inventory/proto"
  5. "encoding/json"
  6. "strconv"
  7. "sync"
  8. )
  9. type signinmgr struct {
  10. lock *sync.RWMutex
  11. signSequence []Signin
  12. continueAward []*ContinueAward
  13. userlist map[int]*userSignin
  14. }
  15. func newSigninManager() *signinmgr {
  16. sm := new(signinmgr)
  17. sm.lock = &sync.RWMutex{}
  18. sm.userlist = make(map[int]*userSignin)
  19. sm.loadSigninInfo()
  20. log.Debug("signin manager running")
  21. return sm
  22. }
  23. func (sm *signinmgr) loadSigninInfo() {
  24. //获取系统签到数值
  25. signlist := getSignList()
  26. if len(signlist) <= 0 {
  27. return
  28. }
  29. //获取系统连续奖励数值
  30. awardlist := getContinueAwardList()
  31. sm.lock.Lock()
  32. defer sm.lock.Unlock()
  33. sm.signSequence = signlist
  34. sm.continueAward = awardlist
  35. }
  36. func (sm *signinmgr) getSinInfo(id int) *Signin {
  37. sm.lock.RLock()
  38. defer sm.lock.RUnlock()
  39. for _, v := range sm.signSequence {
  40. if id == v.Id {
  41. return &v
  42. }
  43. }
  44. return nil
  45. }
  46. func (sm *signinmgr) getSignList() []Signin {
  47. sm.lock.RLock()
  48. defer sm.lock.RUnlock()
  49. ret := make([]Signin, len(sm.signSequence))
  50. copy(ret, sm.signSequence)
  51. return ret
  52. }
  53. func (sm *signinmgr) getContinueAwardInfo(day int) *ContinueAward {
  54. sm.lock.RLock()
  55. defer sm.lock.RUnlock()
  56. for _, v := range sm.continueAward {
  57. if v.Day == day {
  58. return v
  59. }
  60. }
  61. return nil
  62. }
  63. func (sm *signinmgr) getContinueAwardList() []*ContinueAward {
  64. sm.lock.RLock()
  65. defer sm.lock.RUnlock()
  66. return sm.continueAward
  67. }
  68. // 获取或创建用户
  69. func (sm *signinmgr) getUser(userId int) *userSignin {
  70. sm.lock.RLock()
  71. us, ok := sm.userlist[userId]
  72. sm.lock.RUnlock()
  73. if !ok {
  74. // 用户不存在
  75. us = newUserSignin(userId)
  76. sm.lock.Lock()
  77. sm.userlist[userId] = us
  78. sm.lock.Unlock()
  79. }
  80. return us
  81. }
  82. func (sm *signinmgr) removeUser(userId int) {
  83. sm.lock.Lock()
  84. defer sm.lock.Unlock()
  85. delete(sm.userlist, userId)
  86. }
  87. func (sm *signinmgr) getUserSigninInfo(userId int) *SigninInfo {
  88. user := sm.getUser(userId)
  89. return user.getSigninInfo()
  90. }
  91. func (sm *signinmgr) checkSignTip(userId int) bool {
  92. user := sm.getUser(userId)
  93. return user.checkSignTip()
  94. }
  95. func (sm *signinmgr) doSignin(userId int) (bool, []item.ItemPack) {
  96. user := sm.getUser(userId)
  97. return user.signin()
  98. }
  99. // 领取连续签到奖励
  100. func (sm *signinmgr) giftContinueAward(userId, day int) (bool, []item.ItemPack) {
  101. user := sm.getUser(userId)
  102. return user.giftContinueAward(day)
  103. }
  104. func (sm *signinmgr) dumpSys(param string) {
  105. log.Release("-------------------------------")
  106. log.Release("signinmgr.dumpSys %s", param)
  107. defer func() {
  108. log.Release("+++++++++++++++++++++++++++++++")
  109. log.Release("")
  110. }()
  111. d, _ := json.Marshal(sm.signSequence)
  112. log.Release(string(d))
  113. log.Release(" -------- ")
  114. d, _ = json.Marshal(sm.continueAward)
  115. log.Release(string(d))
  116. }
  117. func (sm *signinmgr) dumpUser(param string) {
  118. log.Release("-------------------------------")
  119. log.Release("signinmgr.dumpUser %s", param)
  120. defer func() {
  121. log.Release("+++++++++++++++++++++++++++++++")
  122. log.Release("")
  123. }()
  124. var userId int
  125. var err error
  126. if userId, err = strconv.Atoi(param); err != nil {
  127. log.Release("atoi error %v", err)
  128. return
  129. }
  130. si := sm.getUserSigninInfo(userId)
  131. if si == nil {
  132. log.Release("user %d not exist", userId)
  133. return
  134. }
  135. d, _ := json.Marshal(si)
  136. log.Release(string(d))
  137. }