newbie_extra.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package gamelogic
  2. import (
  3. "bet24.com/log"
  4. "bet24.com/redis"
  5. "bet24.com/servers/games/fish/config"
  6. "fmt"
  7. "sync"
  8. )
  9. type newbie_extra struct {
  10. extralist []config.NewbieExtra
  11. userlist map[int]int
  12. lock *sync.RWMutex
  13. }
  14. //var ne *newbie_extra
  15. /*func getNewbieExtra() *newbie_extra {
  16. if ne == nil {
  17. ne = newNewbieExtra()
  18. }
  19. return ne
  20. }*/
  21. func newNewbieExtra(roomName string) *newbie_extra {
  22. ne := new(newbie_extra)
  23. ne.userlist = make(map[int]int)
  24. ne.lock = &sync.RWMutex{}
  25. ne.getExtraList(roomName)
  26. return ne
  27. }
  28. func (ne *newbie_extra) getExtraList(roomName string) {
  29. ne.extralist = config.GetNewbieExtraList(roomName)
  30. }
  31. func (ne *newbie_extra) getUserKey(userId int) string {
  32. return fmt.Sprintf("fish:newbie:%d", userId)
  33. }
  34. func (ne *newbie_extra) onUserEnter(userId int) {
  35. if len(ne.extralist) == 0 || userId == 0 {
  36. return
  37. }
  38. ne.lock.RLock()
  39. _, ok := ne.userlist[userId]
  40. ne.lock.RUnlock()
  41. if ok {
  42. log.Debug("newbie_extra.onUserEnter %d already exist", userId)
  43. return
  44. }
  45. ne.lock.Lock()
  46. ne.userlist[userId] = redis.String_GetInt(ne.getUserKey(userId))
  47. ne.lock.Unlock()
  48. }
  49. func (ne *newbie_extra) onUserExit(userId int) {
  50. if len(ne.extralist) == 0 || userId == 0 {
  51. return
  52. }
  53. ne.lock.RLock()
  54. bulletCount, ok := ne.userlist[userId]
  55. ne.lock.RUnlock()
  56. if !ok {
  57. log.Debug("newbie_extra.onUserExit %d not exist", userId)
  58. return
  59. }
  60. redis.String_Set(ne.getUserKey(userId), fmt.Sprintf("%d", bulletCount))
  61. }
  62. func (ne *newbie_extra) getExtra(userId int) int {
  63. if len(ne.extralist) == 0 || userId == 0 {
  64. return 0
  65. }
  66. ne.lock.Lock()
  67. ne.userlist[userId]++
  68. bulletCount, _ := ne.userlist[userId]
  69. ne.lock.Unlock()
  70. for _, v := range ne.extralist {
  71. if bulletCount <= v.MaxBullet {
  72. return v.Extra
  73. }
  74. }
  75. return 0
  76. }