| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- package room
- import (
- "bet24.com/log"
- "bet24.com/servers/common"
- pb "bet24.com/servers/micros/audioroom/proto"
- "bet24.com/servers/micros/audioroom/transaction/database"
- "bet24.com/servers/zego"
- "strconv"
- )
- // 加载成员数据
- func (this *Room) loadMembers() {
- memberList := database.GetMembers(this.RoomId)
- if len(memberList) <= 0 {
- return
- }
- this.members = memberList
- }
- // 是否管理员
- func (this *Room) isAdmin(userId int) bool {
- m := this.GetMemberInfo(userId)
- return m.RoleId == pb.Role_Administrator || m.RoleId == pb.Role_Assistant
- }
- // 添加管理员
- func (this *Room) AddAdmin(userId, toUserId int) int {
- // 不是管理员
- if this.UserId != userId {
- return 11
- }
- var roleId int
- for i := 0; i < len(this.members); i++ {
- if this.members[i].UserId != toUserId {
- continue
- }
- // 判断是否是管理员、助手
- if this.members[i].RoleId == pb.Role_Administrator || this.members[i].RoleId == pb.Role_Assistant {
- return 12
- }
- member := this.members[i]
- roleId = member.RoleId
- info := pb.UserRoomInfo{
- UserId: toUserId,
- RoomId: this.RoomId,
- RoleId: pb.Role_Assistant,
- Level: member.Level,
- Crdate: common.GetNowTimeStr(),
- }
- // 修改会员信息
- this.members[i] = info
- go func() {
- // 给所有用户发送通知
- this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
- Reason: pb.Notify_Reason_User_ChangeRole,
- UserId: toUserId,
- OldRoleId: roleId,
- NewRoleId: pb.Role_Assistant,
- })
- // 数据库操作
- database.SaveUserRoom(info.UserId, info.RoomId, info.RoleId, info.Crdate)
- }()
- return 1
- }
- return 13
- }
- // 取消管理员
- func (this *Room) DelAdmin(userId, toUserId int) int {
- // 不是管理员
- if this.UserId != userId {
- return 11
- }
- var roleId int
- for i := 0; i < len(this.members); i++ {
- if this.members[i].UserId != toUserId {
- continue
- }
- // 判断是否是管理员、助手
- if this.members[i].RoleId != pb.Role_Assistant {
- return 12
- }
- member := this.members[i]
- roleId = member.RoleId
- info := pb.UserRoomInfo{
- UserId: toUserId,
- RoomId: this.RoomId,
- Level: member.Level,
- RoleId: pb.Role_Member,
- Crdate: common.GetNowTimeStr(),
- }
- // 修改会员信息
- this.members[i] = info
- go func() {
- // 给所有用户发送通知
- this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
- Reason: pb.Notify_Reason_User_ChangeRole,
- UserId: toUserId,
- OldRoleId: roleId,
- NewRoleId: pb.Role_Member,
- })
- // 数据库操作
- database.SaveUserRoom(info.UserId, info.RoomId, info.RoleId, info.Crdate)
- }()
- return 1
- }
- return 14
- }
- // 删除会员,是否踢出房间
- func (this *Room) DelMember(userId, toUserId int, isKickOut bool) int {
- log.Debug("room_member.delMember userId=%d toUserId=%d", userId, toUserId)
- // 不是管理层成员
- if !this.isAdmin(userId) {
- return 11
- }
- var roleId int
- for i := 0; i < len(this.members); i++ {
- if this.members[i].UserId != toUserId {
- continue
- }
- roleId = this.members[i].RoleId
- // 删除会员
- this.members = append(this.members[:i], this.members[i+1:]...)
- break
- }
- this.MemberCount = len(this.members)
- // 需要踢出房间
- if isKickOut {
- roomId := strconv.Itoa(this.RoomId)
- uid := strconv.Itoa(toUserId)
- // sdk服务器 ==> 踢出房间用户
- code, message := zego.KickoutUser(roomId, uid)
- log.Debug("room.delMember(zego.KickoutUser) userId=%s roomId=%s code=%d message=%s",
- uid, roomId, code, message)
- }
- go func() {
- // 更新会员数
- database.UpdateMemberCount(this.RoomId, this.MemberCount)
- // 给所有用户发送通知
- this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
- Reason: pb.Notify_Reason_User_ChangeRole,
- UserId: toUserId,
- OldRoleId: roleId,
- NewRoleId: pb.Role_Guest,
- })
- }()
- return 1
- }
- // 成员列表
- func (this *Room) GetMembers() []pb.UserRoomInfo {
- return this.members
- }
- // 成员信息
- func (this *Room) GetMemberInfo(userId int) pb.UserRoomInfo {
- for _, v := range this.members {
- if v.UserId == userId {
- return v
- }
- }
- return pb.UserRoomInfo{}
- }
- // 加入
- func (this *Room) AddJoin(userId, roleId int) int {
- // log.Debug("room_member.addJoin userId=%d roomId=%d roleId=%d", userId, this.RoomId, roleId)
- if m := this.GetMemberInfo(userId); m.UserId > 0 {
- return 11
- }
- this.members = append(this.members, pb.UserRoomInfo{
- UserId: userId,
- RoomId: this.RoomId,
- RoleId: roleId,
- Level: 1,
- Crdate: common.GetNowTimeStr(),
- })
- this.MemberCount = len(this.members)
- go func() {
- // 给所有用户发送通知
- this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
- Reason: pb.Notify_Reason_User_ChangeRole,
- UserId: userId,
- OldRoleId: pb.Role_Guest,
- NewRoleId: roleId,
- })
- // 通知房间变化
- this.notify(pb.Notify_Action_Refresh_Room, pb.ReasonData{})
- // 更新会员数
- database.UpdateMemberCount(this.RoomId, this.MemberCount)
- }()
- return 1
- }
- // 取消加入
- func (this *Room) DelJoin(userId int) int {
- var roleId int
- for i := 0; i < len(this.members); i++ {
- if this.members[i].UserId != userId {
- continue
- }
- // 判断是否是管理员
- if this.members[i].RoleId == pb.Role_Administrator {
- return 11
- }
- roleId = this.members[i].RoleId
- this.members = append(this.members[:i], this.members[i+1:]...)
- this.MemberCount = len(this.members)
- break
- }
- go func() {
- // 给所有用户发送通知
- this.notify(pb.Notify_Action_Refresh_User, pb.ReasonData{
- Reason: pb.Notify_Reason_User_ChangeRole,
- UserId: userId,
- OldRoleId: roleId,
- NewRoleId: pb.Role_Guest,
- })
- // 通知房间变化
- this.notify(pb.Notify_Action_Refresh_Room, pb.ReasonData{})
- // 更新会员数
- database.UpdateMemberCount(this.RoomId, this.MemberCount)
- }()
- return 1
- }
- // 更新会员等级(只改缓存数据)
- func (this *Room) UpdateMemberLevel(userId, level, exps int) {
- for k, v := range this.members {
- if v.UserId != userId {
- continue
- }
- this.members[k].Level = level
- this.members[k].Exps = exps
- break
- }
- return
- }
|