room_member.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. package room
  2. import (
  3. "bet24.com/log"
  4. "bet24.com/servers/common"
  5. pb "bet24.com/servers/micros/audioroom/proto"
  6. "bet24.com/servers/micros/audioroom/transaction/database"
  7. "bet24.com/servers/zego"
  8. "strconv"
  9. )
  10. // 加载成员数据
  11. func (this *Room) loadMembers() {
  12. memberList := database.GetMembers(this.RoomId)
  13. if len(memberList) <= 0 {
  14. return
  15. }
  16. this.members = memberList
  17. }
  18. // 是否管理员
  19. func (this *Room) isAdmin(userId int) bool {
  20. m := this.GetMemberInfo(userId)
  21. return m.RoleId == pb.Role_Administrator || m.RoleId == pb.Role_Assistant
  22. }
  23. // 添加管理员
  24. func (this *Room) AddAdmin(userId, toUserId int) int {
  25. // 不是管理员
  26. if this.UserId != userId {
  27. return 11
  28. }
  29. var roleId int
  30. for i := 0; i < len(this.members); i++ {
  31. if this.members[i].UserId != toUserId {
  32. continue
  33. }
  34. // 判断是否是管理员、助手
  35. if this.members[i].RoleId == pb.Role_Administrator || this.members[i].RoleId == pb.Role_Assistant {
  36. return 12
  37. }
  38. member := this.members[i]
  39. roleId = member.RoleId
  40. info := pb.UserRoomInfo{
  41. UserId: toUserId,
  42. RoomId: this.RoomId,
  43. RoleId: pb.Role_Assistant,
  44. Level: member.Level,
  45. Crdate: common.GetNowTimeStr(),
  46. }
  47. // 修改会员信息
  48. this.members[i] = info
  49. go func() {
  50. // 给所有用户发送通知
  51. this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
  52. Reason: pb.Notify_Reason_User_ChangeRole,
  53. UserId: toUserId,
  54. OldRoleId: roleId,
  55. NewRoleId: pb.Role_Assistant,
  56. })
  57. // 数据库操作
  58. database.SaveUserRoom(info.UserId, info.RoomId, info.RoleId, info.Crdate)
  59. }()
  60. return 1
  61. }
  62. return 13
  63. }
  64. // 取消管理员
  65. func (this *Room) DelAdmin(userId, toUserId int) int {
  66. // 不是管理员
  67. if this.UserId != userId {
  68. return 11
  69. }
  70. var roleId int
  71. for i := 0; i < len(this.members); i++ {
  72. if this.members[i].UserId != toUserId {
  73. continue
  74. }
  75. // 判断是否是管理员、助手
  76. if this.members[i].RoleId != pb.Role_Assistant {
  77. return 12
  78. }
  79. member := this.members[i]
  80. roleId = member.RoleId
  81. info := pb.UserRoomInfo{
  82. UserId: toUserId,
  83. RoomId: this.RoomId,
  84. Level: member.Level,
  85. RoleId: pb.Role_Member,
  86. Crdate: common.GetNowTimeStr(),
  87. }
  88. // 修改会员信息
  89. this.members[i] = info
  90. go func() {
  91. // 给所有用户发送通知
  92. this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
  93. Reason: pb.Notify_Reason_User_ChangeRole,
  94. UserId: toUserId,
  95. OldRoleId: roleId,
  96. NewRoleId: pb.Role_Member,
  97. })
  98. // 数据库操作
  99. database.SaveUserRoom(info.UserId, info.RoomId, info.RoleId, info.Crdate)
  100. }()
  101. return 1
  102. }
  103. return 14
  104. }
  105. // 删除会员,是否踢出房间
  106. func (this *Room) DelMember(userId, toUserId int, isKickOut bool) int {
  107. log.Debug("room_member.delMember userId=%d toUserId=%d", userId, toUserId)
  108. // 不是管理层成员
  109. if !this.isAdmin(userId) {
  110. return 11
  111. }
  112. var roleId int
  113. for i := 0; i < len(this.members); i++ {
  114. if this.members[i].UserId != toUserId {
  115. continue
  116. }
  117. roleId = this.members[i].RoleId
  118. // 删除会员
  119. this.members = append(this.members[:i], this.members[i+1:]...)
  120. break
  121. }
  122. this.MemberCount = len(this.members)
  123. // 需要踢出房间
  124. if isKickOut {
  125. roomId := strconv.Itoa(this.RoomId)
  126. uid := strconv.Itoa(toUserId)
  127. // sdk服务器 ==> 踢出房间用户
  128. code, message := zego.KickoutUser(roomId, uid)
  129. log.Debug("room.delMember(zego.KickoutUser) userId=%s roomId=%s code=%d message=%s",
  130. uid, roomId, code, message)
  131. }
  132. go func() {
  133. // 更新会员数
  134. database.UpdateMemberCount(this.RoomId, this.MemberCount)
  135. // 给所有用户发送通知
  136. this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
  137. Reason: pb.Notify_Reason_User_ChangeRole,
  138. UserId: toUserId,
  139. OldRoleId: roleId,
  140. NewRoleId: pb.Role_Guest,
  141. })
  142. }()
  143. return 1
  144. }
  145. // 成员列表
  146. func (this *Room) GetMembers() []pb.UserRoomInfo {
  147. return this.members
  148. }
  149. // 成员信息
  150. func (this *Room) GetMemberInfo(userId int) pb.UserRoomInfo {
  151. for _, v := range this.members {
  152. if v.UserId == userId {
  153. return v
  154. }
  155. }
  156. return pb.UserRoomInfo{}
  157. }
  158. // 加入
  159. func (this *Room) AddJoin(userId, roleId int) int {
  160. // log.Debug("room_member.addJoin userId=%d roomId=%d roleId=%d", userId, this.RoomId, roleId)
  161. if m := this.GetMemberInfo(userId); m.UserId > 0 {
  162. return 11
  163. }
  164. this.members = append(this.members, pb.UserRoomInfo{
  165. UserId: userId,
  166. RoomId: this.RoomId,
  167. RoleId: roleId,
  168. Level: 1,
  169. Crdate: common.GetNowTimeStr(),
  170. })
  171. this.MemberCount = len(this.members)
  172. go func() {
  173. // 给所有用户发送通知
  174. this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
  175. Reason: pb.Notify_Reason_User_ChangeRole,
  176. UserId: userId,
  177. OldRoleId: pb.Role_Guest,
  178. NewRoleId: roleId,
  179. })
  180. // 通知房间变化
  181. this.notify(pb.Notify_Action_Refresh_Room, pb.ReasonData{})
  182. // 更新会员数
  183. database.UpdateMemberCount(this.RoomId, this.MemberCount)
  184. }()
  185. return 1
  186. }
  187. // 取消加入
  188. func (this *Room) DelJoin(userId int) int {
  189. var roleId int
  190. for i := 0; i < len(this.members); i++ {
  191. if this.members[i].UserId != userId {
  192. continue
  193. }
  194. // 判断是否是管理员
  195. if this.members[i].RoleId == pb.Role_Administrator {
  196. return 11
  197. }
  198. roleId = this.members[i].RoleId
  199. this.members = append(this.members[:i], this.members[i+1:]...)
  200. this.MemberCount = len(this.members)
  201. break
  202. }
  203. go func() {
  204. // 给所有用户发送通知
  205. this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
  206. Reason: pb.Notify_Reason_User_ChangeRole,
  207. UserId: userId,
  208. OldRoleId: roleId,
  209. NewRoleId: pb.Role_Guest,
  210. })
  211. // 通知房间变化
  212. this.notify(pb.Notify_Action_Refresh_Room, pb.ReasonData{})
  213. // 更新会员数
  214. database.UpdateMemberCount(this.RoomId, this.MemberCount)
  215. }()
  216. return 1
  217. }
  218. // 更新会员等级(只改缓存数据)
  219. func (this *Room) UpdateMemberLevel(userId, level, exps int) {
  220. for k, v := range this.members {
  221. if v.UserId != userId {
  222. continue
  223. }
  224. this.members[k].Level = level
  225. this.members[k].Exps = exps
  226. break
  227. }
  228. return
  229. }