room_member.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package admin
  2. import (
  3. "bet24.com/servers/micros/audioroom/handler/manager"
  4. pb "bet24.com/servers/micros/audioroom/proto"
  5. user "bet24.com/servers/micros/userservices/proto"
  6. "sort"
  7. )
  8. // 获取语聊房成员 - 后台
  9. func (this *adminMgr) AdminGetRoomMember(roomId int) []pb.AdminRoomMember {
  10. var memberList []pb.AdminRoomMember
  11. if roomId == 0 {
  12. for _, v := range manager.AdminMgr.GetAllRoom() {
  13. list := this.getOnlineGroupMember(v.RoomId)
  14. memberList = append(memberList, list...)
  15. }
  16. } else {
  17. memberList = this.getOnlineGroupMember(roomId)
  18. }
  19. return this.changeMemberListSort(memberList)
  20. }
  21. // 获取在线的群成员
  22. func (this *adminMgr) getOnlineGroupMember(roomId int) []pb.AdminRoomMember {
  23. r := manager.AdminMgr.GetRoom(roomId)
  24. if r == nil {
  25. return nil
  26. }
  27. var list []pb.AdminRoomMember
  28. onlineUser := r.GetOnlineUsers()
  29. if len(onlineUser) == 0 {
  30. return list
  31. }
  32. for _, member := range r.GetMembers() {
  33. var isExist bool
  34. for _, uid := range onlineUser {
  35. if member.UserId != uid {
  36. continue
  37. }
  38. isExist = true
  39. }
  40. if !isExist {
  41. continue
  42. }
  43. // 无效用户
  44. u := user.GetUserInfo(member.UserId)
  45. if u == nil {
  46. continue
  47. }
  48. list = append(list, pb.AdminRoomMember{
  49. RoomID: r.RoomId,
  50. UserID: u.UserId,
  51. NickName: u.NickName,
  52. RoleID: member.RoleId,
  53. Exps: member.Exps,
  54. Level: member.Level,
  55. Crdate: member.Crdate,
  56. })
  57. }
  58. return list
  59. }
  60. // 获取语聊房房间的在线用户 - 后台
  61. func (this *adminMgr) AdminGetRoomOnlineUsers(roomId int) []pb.AdminRoomMember {
  62. var onlineList []pb.AdminRoomMember
  63. if roomId == 0 {
  64. for _, v := range manager.AdminMgr.GetAllRoom() {
  65. userList := this.getRoomOnlineUsers(v.RoomId)
  66. onlineList = append(onlineList, userList...)
  67. }
  68. } else {
  69. onlineList = this.getRoomOnlineUsers(roomId)
  70. }
  71. return this.changeMemberListSort(onlineList)
  72. }
  73. // 获取房间内的在线用户
  74. func (this *adminMgr) getRoomOnlineUsers(roomId int) []pb.AdminRoomMember {
  75. r := manager.AdminMgr.GetRoom(roomId)
  76. if r == nil {
  77. return nil
  78. }
  79. var list []pb.AdminRoomMember
  80. onlineUser := r.GetOnlineUsers()
  81. if len(onlineUser) == 0 {
  82. return list
  83. }
  84. for _, v := range onlineUser {
  85. // 无效用户
  86. u := user.GetUserInfo(v)
  87. if u == nil {
  88. continue
  89. }
  90. member := r.GetMemberInfo(v)
  91. list = append(list, pb.AdminRoomMember{
  92. UserID: u.UserId,
  93. NickName: u.NickName,
  94. RoleID: member.RoleId,
  95. Exps: member.Exps,
  96. Level: member.Level,
  97. Crdate: member.Crdate,
  98. })
  99. }
  100. return list
  101. }
  102. // 改变成员列表的排序
  103. func (this *adminMgr) changeMemberListSort(list []pb.AdminRoomMember) []pb.AdminRoomMember {
  104. // 排序规则:创建者 > 经验值 > 优先加入
  105. sort.SliceStable(list, func(i, j int) bool {
  106. if list[i].RoleID == list[j].RoleID {
  107. if list[i].Exps == list[j].Exps {
  108. return list[i].Crdate < list[j].Crdate
  109. }
  110. return list[i].Exps > list[j].Exps
  111. }
  112. return list[i].RoleID < list[j].RoleID
  113. })
  114. return list
  115. }