adminroommgr.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package manager
  2. import (
  3. "bet24.com/log"
  4. "bet24.com/servers/micros/audioroom/handler/room"
  5. userRoom "bet24.com/servers/micros/audioroom/handler/user"
  6. pb "bet24.com/servers/micros/audioroom/proto"
  7. "bet24.com/servers/micros/audioroom/transaction/admin"
  8. user "bet24.com/servers/micros/userservices/proto"
  9. "sort"
  10. "sync"
  11. "time"
  12. )
  13. var AdminMgr *adminroommgr
  14. type adminroommgr struct {
  15. room *roommgr
  16. roomExpend map[int]pb.RoomExpend // 所有房间的消耗
  17. lock *sync.RWMutex
  18. }
  19. func LoadAdminRoomMgr() {
  20. AdminMgr = new(adminroommgr)
  21. if mgr == nil {
  22. getRoomManager()
  23. }
  24. AdminMgr.room = mgr
  25. AdminMgr.lock = &sync.RWMutex{}
  26. AdminMgr.startRoomExpendPolling()
  27. return
  28. }
  29. // 轮询
  30. func (this *adminroommgr) startRoomExpendPolling() {
  31. ticker := time.NewTicker(10 * time.Minute)
  32. go func(t *time.Ticker) {
  33. for {
  34. select {
  35. case <-t.C:
  36. go this.loadAllRoomExpend()
  37. }
  38. }
  39. }(ticker)
  40. }
  41. // 加载所有房间的消耗
  42. func (this *adminroommgr) loadAllRoomExpend() {
  43. roomExpend := admin.GetAllRoomExpend()
  44. this.roomExpend = make(map[int]pb.RoomExpend)
  45. this.lock.Lock()
  46. defer this.lock.Unlock()
  47. for _, v := range roomExpend {
  48. data := pb.RoomExpend{
  49. RoomId: v.RoomId,
  50. CollectDiamond: v.CollectDiamond,
  51. DiamondAmount: v.DiamondAmount,
  52. CollectGold: v.CollectGold,
  53. GoldAmount: v.GoldAmount,
  54. }
  55. this.roomExpend[v.RoomId] = data
  56. }
  57. }
  58. // 获取所有房间
  59. func (this *adminroommgr) GetAllRoom() []*room.Room {
  60. this.room.roomLock.RLock()
  61. defer this.room.roomLock.RUnlock()
  62. rooms := make([]*room.Room, 0, len(this.room.room_list))
  63. for k, _ := range this.room.room_list {
  64. rooms = append(rooms, this.room.room_list[k])
  65. }
  66. sort.SliceStable(rooms, func(i, j int) bool {
  67. return rooms[i].Crdate > rooms[j].Crdate
  68. })
  69. sort.SliceStable(rooms, func(i, j int) bool {
  70. return rooms[i].TopFlag
  71. })
  72. return rooms
  73. }
  74. // 获取所有的房间列表 - 后台
  75. func (this *adminroommgr) GetRoomList(searchKey string, roomId int) []pb.AdminRoomInfo {
  76. var ret []pb.AdminRoomInfo
  77. this.room.roomLock.RLock()
  78. for k := range this.room.room_list {
  79. v := this.room.room_list[k]
  80. if pb.IsNotContainName(searchKey, roomId, v.RoomName) {
  81. continue
  82. }
  83. if pb.IsNotContainId(searchKey, roomId, v.RoomId) {
  84. continue
  85. }
  86. userInfo := user.GetUserInfo(v.UserId)
  87. if userInfo == nil {
  88. continue
  89. }
  90. data := pb.AdminRoomInfo{}
  91. data.RoomId = v.RoomId
  92. data.RoomName = v.RoomName
  93. data.UserId = v.UserId
  94. data.NickName = userInfo.NickName
  95. data.Level = v.Level
  96. data.Exps = v.Exps
  97. data.MemberCount = v.MemberCount
  98. data.Crdate = v.Crdate
  99. ret = append(ret, data)
  100. }
  101. this.room.roomLock.RUnlock()
  102. for k, v := range ret {
  103. data := this.GetRoomExpend(v.RoomId)
  104. ret[k].CollectDiamond = data.CollectDiamond
  105. ret[k].DiamondAmount = data.DiamondAmount
  106. ret[k].CollectGold = data.CollectGold
  107. ret[k].GoldAmount = data.GoldAmount
  108. }
  109. return ret
  110. }
  111. // 获取房间的消耗
  112. func (this *adminroommgr) GetRoomExpend(roomId int) pb.RoomExpend {
  113. this.lock.RLock()
  114. data, ok := this.roomExpend[roomId]
  115. this.lock.RUnlock()
  116. if !ok {
  117. return pb.RoomExpend{}
  118. }
  119. return data
  120. }
  121. // 获取房间 - 后台
  122. func (this *adminroommgr) GetRoom(roomId int) *room.Room {
  123. roomInfo := this.room.getRoom(roomId, true)
  124. if roomInfo == nil {
  125. log.Debug("adminroommgr.getRoom roomId=%d not exist", roomId)
  126. return nil
  127. }
  128. return roomInfo
  129. }
  130. // 获取用户 - 后台
  131. func (this *adminroommgr) GetUser(userId int) *userRoom.UserRoom {
  132. userInfo := this.room.getUser(userId, true)
  133. if userInfo == nil {
  134. log.Debug("adminroommgr.GetUser userId=%d not exist", userId)
  135. return nil
  136. }
  137. return userInfo
  138. }