userwinmanager.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package userwin
  2. import (
  3. "bet24.com/log"
  4. "strconv"
  5. "sync"
  6. )
  7. var instance *userwinmanager
  8. type userwinmanager struct {
  9. lock *sync.RWMutex
  10. userlist map[int]int
  11. }
  12. func getInstance() *userwinmanager {
  13. if instance == nil {
  14. instance = new(userwinmanager)
  15. instance.ctor()
  16. }
  17. return instance
  18. }
  19. func (um *userwinmanager) ctor() {
  20. um.userlist = make(map[int]int)
  21. um.lock = &sync.RWMutex{}
  22. }
  23. func (um *userwinmanager) addUser(userId int) {
  24. um.lock.RLock()
  25. _, ok := um.userlist[userId]
  26. um.lock.RUnlock()
  27. if ok {
  28. return
  29. }
  30. um.lock.Lock()
  31. um.userlist[userId] = 0
  32. um.lock.Unlock()
  33. }
  34. func (um *userwinmanager) removeUser(userId int) {
  35. um.lock.Lock()
  36. delete(um.userlist, userId)
  37. um.lock.Unlock()
  38. }
  39. func (um *userwinmanager) getScore(userId int) int {
  40. um.lock.Lock()
  41. s, ok := um.userlist[userId]
  42. if !ok {
  43. delete(um.userlist, userId)
  44. s = 0
  45. } else {
  46. um.userlist[userId] = 0
  47. }
  48. um.lock.Unlock()
  49. return s
  50. }
  51. func (um *userwinmanager) addScore(userId, score int) {
  52. um.addUser(userId)
  53. um.lock.Lock()
  54. um.userlist[userId] += score
  55. um.lock.Unlock()
  56. }
  57. func (um *userwinmanager) dump(param string) {
  58. log.Release("-------------------------------")
  59. log.Release("userwinmanager.dump")
  60. defer func() {
  61. log.Release("+++++++++++++++++++++++++++++++")
  62. log.Release("")
  63. }()
  64. if param == "" {
  65. um.lock.RLock()
  66. for k, v := range um.userlist {
  67. log.Release(" %d:%d", k, v)
  68. }
  69. um.lock.RUnlock()
  70. return
  71. }
  72. var userId int
  73. var err error
  74. if userId, err = strconv.Atoi(param); err != nil {
  75. log.Release("atoi error %v", err)
  76. return
  77. }
  78. um.lock.RLock()
  79. log.Release(" %d:%d", userId, um.userlist[userId])
  80. um.lock.RUnlock()
  81. }