| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package userwin
- import (
- "bet24.com/log"
- "strconv"
- "sync"
- )
- var instance *userwinmanager
- type userwinmanager struct {
- lock *sync.RWMutex
- userlist map[int]int
- }
- func getInstance() *userwinmanager {
- if instance == nil {
- instance = new(userwinmanager)
- instance.ctor()
- }
- return instance
- }
- func (um *userwinmanager) ctor() {
- um.userlist = make(map[int]int)
- um.lock = &sync.RWMutex{}
- }
- func (um *userwinmanager) addUser(userId int) {
- um.lock.RLock()
- _, ok := um.userlist[userId]
- um.lock.RUnlock()
- if ok {
- return
- }
- um.lock.Lock()
- um.userlist[userId] = 0
- um.lock.Unlock()
- }
- func (um *userwinmanager) removeUser(userId int) {
- um.lock.Lock()
- delete(um.userlist, userId)
- um.lock.Unlock()
- }
- func (um *userwinmanager) getScore(userId int) int {
- um.lock.Lock()
- s, ok := um.userlist[userId]
- if !ok {
- delete(um.userlist, userId)
- s = 0
- } else {
- um.userlist[userId] = 0
- }
- um.lock.Unlock()
- return s
- }
- func (um *userwinmanager) addScore(userId, score int) {
- um.addUser(userId)
- um.lock.Lock()
- um.userlist[userId] += score
- um.lock.Unlock()
- }
- func (um *userwinmanager) dump(param string) {
- log.Release("-------------------------------")
- log.Release("userwinmanager.dump")
- defer func() {
- log.Release("+++++++++++++++++++++++++++++++")
- log.Release("")
- }()
- if param == "" {
- um.lock.RLock()
- for k, v := range um.userlist {
- log.Release(" %d:%d", k, v)
- }
- um.lock.RUnlock()
- return
- }
- var userId int
- var err error
- if userId, err = strconv.Atoi(param); err != nil {
- log.Release("atoi error %v", err)
- return
- }
- um.lock.RLock()
- log.Release(" %d:%d", userId, um.userlist[userId])
- um.lock.RUnlock()
- }
|