prizepoolmanager.go 801 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package prizepool
  2. import (
  3. "sync"
  4. )
  5. func GetPrizePool(roomName string, roomMinBulletId int) *PrizePool {
  6. return getPoolManager().getPrizePool(roomName, roomMinBulletId)
  7. }
  8. var poolMgr *poolmanager
  9. func getPoolManager() *poolmanager {
  10. if poolMgr == nil {
  11. poolMgr = new(poolmanager)
  12. poolMgr.ctor()
  13. }
  14. return poolMgr
  15. }
  16. type poolmanager struct {
  17. pools map[string]*PrizePool
  18. lock *sync.RWMutex
  19. }
  20. func (pm *poolmanager) ctor() {
  21. pm.pools = make(map[string]*PrizePool)
  22. pm.lock = &sync.RWMutex{}
  23. }
  24. func (pm *poolmanager) getPrizePool(roomName string, roomMinBulletId int) *PrizePool {
  25. pm.lock.RLock()
  26. p, ok := pm.pools[roomName]
  27. pm.lock.RUnlock()
  28. if ok {
  29. return p
  30. }
  31. p = NewPrizePool(roomName, roomMinBulletId)
  32. pm.lock.Lock()
  33. pm.pools[roomName] = p
  34. pm.lock.Unlock()
  35. return p
  36. }