From 3d2b4cea64322c706322ff69c7c25679136e4ff8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 14 Sep 2023 17:29:12 +0800 Subject: [PATCH] 1 --- server/hallserver/room/member.go | 6 ++++++ server/hallserver/room/room.go | 7 +++++-- server/hallserver/room/roommgr.go | 2 +- server/hallserver/room/team.go | 15 ++++++++++++--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/server/hallserver/room/member.go b/server/hallserver/room/member.go index d49b2f04..9e04392e 100644 --- a/server/hallserver/room/member.go +++ b/server/hallserver/room/member.go @@ -27,6 +27,12 @@ func (this *member) init(room *room, hum common.Player) { func (this *member) unInit() { this.teamEntry.DelInit() + delete(this.room.members, this.hum.GetAccountId()) + if this.hum.GetRoom() == this.room { + this.hum.SetRoom(nil) + } + this.room = nil + this.team = nil } func (this *member) fillMFMember(pb *cs.MFMember) { diff --git a/server/hallserver/room/room.go b/server/hallserver/room/room.go index 58cbe83c..58b06f73 100644 --- a/server/hallserver/room/room.go +++ b/server/hallserver/room/room.go @@ -323,7 +323,7 @@ func (this *room) notifyGameStart() { ele := q5.NewSliceElement(&startInfo.TeamList) ele.TeamUuid = t.teamUuid q5.NewSlice(&ele.Members, 0, 4) - t.members.ForEach_r( + t.members.ForEach( func (data interface{}) bool { m := data.(*member) if m.state == MEMBER_READY_STATE { @@ -401,7 +401,10 @@ func (this *room) genTeamId() int32 { func (this *room) removeMember(accountId string) { m := this.getMember(accountId) if m != nil { + t := m.team m.unInit() - delete(this.members, accountId) + if t.getMemberNum() <= 0 { + t.unInit() + } } } diff --git a/server/hallserver/room/roommgr.go b/server/hallserver/room/roommgr.go index dd2e9ce7..95a126e3 100644 --- a/server/hallserver/room/roommgr.go +++ b/server/hallserver/room/roommgr.go @@ -104,7 +104,7 @@ func (this *roomMgr) CMSearchRoom(hdr *f5.MsgHdr, msg *cs.CMSearchRoom) { rspMsg := cs.SMSearchRoom{} rspMsg.Rows = make([]*cs.MFRoom, constant.SEARCH_ROOM_PAGE_SIZE, constant.SEARCH_ROOM_PAGE_SIZE) sinceId := msg.GetSinceId() - this.roomList.ForEach_r( + this.roomList.ForEach( func (data interface{}) bool { r := data.(room) if r.roomIdx > sinceId && r.viewable() { diff --git a/server/hallserver/room/team.go b/server/hallserver/room/team.go index e1444df2..17304d81 100644 --- a/server/hallserver/room/team.go +++ b/server/hallserver/room/team.go @@ -19,7 +19,13 @@ func (this *team) init(room *room, teamId int32, teamUuid string) { } func (this *team) unInit() { - + this.members.ForEach( + func (data interface{}) bool { + m := data.(*member) + m.unInit() + return true + }) + this.room = nil } func (this *team) addMember(m *member) { @@ -30,13 +36,16 @@ func (this *team) addMember(m *member) { this.members.AddTail(&m.teamEntry) } +func (this *team) removeMember(m *member) { +} + func (this *team) getMemberNum() int32 { return this.members.Size() } func (this *team) hasAlreadMember() bool { ok := false - this.members.ForEach_r( + this.members.ForEach( func (data interface{}) bool { m := data.(*member) if m.state == MEMBER_READY_STATE { @@ -50,7 +59,7 @@ func (this *team) hasAlreadMember() bool { func (this *team) getOwnerCandidate() *member { var ownerCandidate *member - this.members.ForEach_r( + this.members.ForEach( func (data interface{}) bool { m := data.(*member) if m.hum.IsOnline() {