From 97a0ede5c153deab3f816b51977dcb7ce415e680 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 12 Sep 2023 11:46:04 +0800 Subject: [PATCH] 1 --- server/hallserver/constant/constant.go | 1 + server/hallserver/proto/cs_msgid.proto | 6 +++ server/hallserver/proto/cs_proto.proto | 30 ++++++++++++ server/hallserver/room/constant.go | 5 ++ server/hallserver/room/room.go | 65 ++++++++++++++++++++------ server/hallserver/room/roommgr.go | 6 +++ 6 files changed, 100 insertions(+), 13 deletions(-) create mode 100644 server/hallserver/room/constant.go diff --git a/server/hallserver/constant/constant.go b/server/hallserver/constant/constant.go index 88714d56..37f27595 100644 --- a/server/hallserver/constant/constant.go +++ b/server/hallserver/constant/constant.go @@ -30,3 +30,4 @@ const ( const SEARCH_ROOM_PAGE_SIZE = 20 const ROOM_MAX_PLAYER_NUM = 40 const ROOM_MAX_TEAM_NUM = 10 +const ROOM_MAX_TEAM_MEMBER_NUM = 4 diff --git a/server/hallserver/proto/cs_msgid.proto b/server/hallserver/proto/cs_msgid.proto index 516033b5..4dab3395 100644 --- a/server/hallserver/proto/cs_msgid.proto +++ b/server/hallserver/proto/cs_msgid.proto @@ -36,4 +36,10 @@ enum SMMessageId_e _SMStartGame = 111; _SMSetPrepare = 112; _SMKickout = 113; + + _SMRoomMemberChagnedNotify = 1001; + _SMRoomKickoutNotify = 1002; + _SMRoomLeaveNotify = 1003; + _SMRoomDisbandNotify = 1004; + _SMRoomChangedNotify = 1005; } diff --git a/server/hallserver/proto/cs_proto.proto b/server/hallserver/proto/cs_proto.proto index fd8f4038..ddea36bd 100644 --- a/server/hallserver/proto/cs_proto.proto +++ b/server/hallserver/proto/cs_proto.proto @@ -268,3 +268,33 @@ message CMSetPrepare message CMKickout { } + +//房间成员信息变更通知 +message SMRoomMemberChangeNotify +{ + optional MFMember member = 1; //成员信息 +} + +//房间踢人通知 +message SMRoomKickoutNotify +{ + repeated string account_ids = 1; //成员account_id列表 +} + +//房间玩家离开通知 +message SMRoomLeaveNotify +{ + repeated string account_ids = 1; //成员account_id列表 +} + +//房间解散通知 +message SMRoomDisbandNotify +{ + optional string room_id = 1; //房间id +} + +//房间信息变更通知 +message SMRoomChangeNotify +{ + optional MFRoom room = 1; //房间信息 +} diff --git a/server/hallserver/room/constant.go b/server/hallserver/room/constant.go new file mode 100644 index 00000000..4a0cc90b --- /dev/null +++ b/server/hallserver/room/constant.go @@ -0,0 +1,5 @@ +package room + +const ( + MEMBER_READY_STATE = 1 +) diff --git a/server/hallserver/room/room.go b/server/hallserver/room/room.go index 142cc68d..721db37c 100644 --- a/server/hallserver/room/room.go +++ b/server/hallserver/room/room.go @@ -49,9 +49,20 @@ func (this *room) getMember(accountId string) *member { return nil } +func (this *room) getTeam(teamUuid string) *team { + t, ok := this.teams[teamUuid] + if ok { + return t + } + return nil +} + func (this *room) canJoin(member common.Player, passwd string) bool { if member.GetRoom() != nil { - return false + return false + } + if len(this.teams) >= constant.ROOM_MAX_TEAM_NUM { + return false } if this.getMember(member.GetAccountId()) != nil { return false @@ -59,15 +70,26 @@ func (this *room) canJoin(member common.Player, passwd string) bool { if this.config.passwd != passwd { return false } + t := this.getTeam(member.GetTeamUuid()) + if t != nil && t.getMemberNum() >= constant.ROOM_MAX_TEAM_MEMBER_NUM { + return false + } return false } -func (this *room) join(member common.Player, passwd string) bool { - if !this.canJoin(member, passwd) { +func (this *room) join(hum common.Player, passwd string) bool { + if !this.canJoin(hum, passwd) { return false } - this.members[member.GetAccountId()] = newMember(member) - member.SetRoom(this) + m := newMember(hum) + this.members[hum.GetAccountId()] = m + t := this.getTeam(hum.GetTeamUuid()) + if t == nil { + t = newTeam(m) + this.teams[hum.GetTeamUuid()] = t + } + t.addMember(m) + hum.SetRoom(this) return false } @@ -97,8 +119,11 @@ func (this *room) CMDisbandRoom(hdr *f5.MsgHdr, msg *cs.CMDisbandRoom) { func (this *room) CMLeaveRoom(hdr *f5.MsgHdr, msg *cs.CMLeaveRoom) { hum := hdr.Context.(common.Player) - rspMsg := cs.SMLeaveRoom{} - hum.SendMsg(&rspMsg) + m := this.getMember(hum.GetAccountId()) + if m != nil { + notifyMsg := &cs.SMRoomLeaveNotify{} + this.broadcastMsg(notifyMsg) + } } func (this *room) CMModifyRoom(hdr *f5.MsgHdr, msg *cs.CMModifyRoom) { @@ -114,14 +139,28 @@ func (this *room) CMStartGame(hdr *f5.MsgHdr, msg *cs.CMStartGame) { } func (this *room) CMSetPrepare(hdr *f5.MsgHdr, msg *cs.CMSetPrepare) { - /*hum := hdr.Context.(common.Player) - rspMsg := cs.SMSetPrepare{} - hum.SendMsg(&rspMsg)*/ + hum := hdr.Context.(common.Player) + m := this.getMember(hum.GetAccountId()) + if m != nil { + m.state = MEMBER_READY_STATE + notifyMsg := &cs.SMRoomMemberChangeNotify{} + notifyMsg.Member = new(cs.MFMember) + m.fillMFMember(notifyMsg.Member) + this.broadcastMsg(notifyMsg) + } } func (this *room) CMKickout(hdr *f5.MsgHdr, msg *cs.CMKickout) { - /* hum := hdr.Context.(common.Player) - rspMsg := cs.SMkickout{} - hum.SendMsg(&rspMsg)*/ + m := this.getMember(hum.GetAccountId()) + if m != nil { + notifyMsg := &cs.SMRoomKickoutNotify{} + this.broadcastMsg(notifyMsg) + } +} + +func (this *room) broadcastMsg(msg proto.Message) { + for _, m := range(this.members) { + m.hum.SendMsg(msg) + } } diff --git a/server/hallserver/room/roommgr.go b/server/hallserver/room/roommgr.go index 211abb3a..64fb0cb2 100644 --- a/server/hallserver/room/roommgr.go +++ b/server/hallserver/room/roommgr.go @@ -77,6 +77,12 @@ func (this *roomMgr) CMJoinRoom(hdr *f5.MsgHdr, msg *cs.CMJoinRoom) { hum.SendMsg(&rspMsg) return } + if hum.GetTeamUuid() == "" { + rspMsg.Errcode = proto.Int32(4) + rspMsg.Errmsg = proto.String("team_uuid is empty") + hum.SendMsg(&rspMsg) + return + } r := this.getRoom(msg.GetRoomId()) if r == nil { rspMsg.Errcode = proto.Int32(2)