From ca79b13b23d706abd134e4f1f2c6a2e3ed44563b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 27 Sep 2021 10:22:10 +0000 Subject: [PATCH] 1 --- server/gameserver/matchmgr.cc | 18 +++++++- server/gameserver/matchmgr.h | 1 + server/gameserver/matchteam.cc | 84 ++++++++++++++++++++++++++++++++++ server/gameserver/matchteam.h | 5 ++ 4 files changed, 107 insertions(+), 1 deletion(-) diff --git a/server/gameserver/matchmgr.cc b/server/gameserver/matchmgr.cc index 9692b75..5b99c01 100644 --- a/server/gameserver/matchmgr.cc +++ b/server/gameserver/matchmgr.cc @@ -58,7 +58,7 @@ bool MatchMgr::NeedMatch(const cs::CMJoin& msg) msg.team_mode() == 1 && msg.auto_fill() && msg.team_members().size() > 0 && - msg.team_members().size() < 4; + msg.team_members().size() < MAX_TEAM_NUM; if (need) { MatchTeam* team = GetTeam(msg.team_uuid()); if (team && !team->IsValidMember(msg)) { @@ -73,3 +73,19 @@ MatchTeam* MatchMgr::GetTeam(const std::string& team_uuid) auto itr = team_hash_.find(team_uuid); return itr != team_hash_.end() ? itr->second : nullptr; } + +void MatchMgr::TraverseTeam(std::function func) +{ + if (!func) { + return; + } + bool stop = false; + for (auto& pair : team_hash_) { + if (pair.second) { + func(pair.second, stop); + if (stop){ + return; + } + } + } +} diff --git a/server/gameserver/matchmgr.h b/server/gameserver/matchmgr.h index bfaced8..128eec2 100644 --- a/server/gameserver/matchmgr.h +++ b/server/gameserver/matchmgr.h @@ -27,6 +27,7 @@ public: void _CMMatchCancel(f8::MsgHdr& hdr, const cs::CMMatchCancel& msg); void _CMMatchChoose(f8::MsgHdr& hdr, const cs::CMMatchChoose& msg); void _CMMatchStartGame(f8::MsgHdr& hdr, const cs::CMMatchStartGame& msg); + void TraverseTeam(std::function func); bool NeedMatch(const cs::CMJoin& msg); MatchTeam* GetTeam(const std::string& team_uuid); diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index 25b05e2..544aca8 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -5,6 +5,7 @@ #include "cs_proto.pb.h" #include "matchteam.h" #include "matchmgr.h" +#include "GGListener.h" struct RawTeamMember { @@ -63,6 +64,11 @@ bool MatchTeam::IsValidMember(const cs::CMJoin& msg) void MatchTeam::Update() { + if (master_team_ == this) { + UpdateMaster(); + } else { + UpdateSlave(); + } master_team_->SyncMatchInfo(); } @@ -74,4 +80,82 @@ void MatchTeam::SyncMatchInfo() } notifymsg.mutable_info()->set_phase(phase_); notifymsg.mutable_info()->set_countdown(countdown_); + for (auto& member : curr_member_hash_) { + if (member->socket_handle != 0) { + GGListener::Instance()->SendToClient(member->socket_handle, 0, notifymsg); + } + } +} + +void MatchTeam::TryCombineTeam() +{ + MatchTeam* matched_team = nullptr; + MatchMgr::Instance()->TraverseTeam + ( + [this, &matched_team] (MatchTeam* team, bool& stop) + { + if (team == this) { + return; + } + }); +} + +void MatchTeam::UpdateMaster() +{ + switch (phase_) { + case kMatchCombining: + { + if (GetPredictMemberNum() < MAX_TEAM_NUM) { + TryCombineTeam(); + } + } + break; + case kMatchChoose: + { + + } + break; + case kMatchLock: + { + + } + break; + default: + { + } + break; + } +} + +void MatchTeam::UpdateSlave() +{ + switch (phase_) { + case kMatchCombining: + { + } + break; + case kMatchChoose: + { + + } + break; + case kMatchLock: + { + + } + break; + default: + { + } + break; + } +} + +int MatchTeam::GetPredictMemberNum() +{ + int num = GetRawMemberNum(); + for (auto& pair : combined_team_hash_) { + num += pair.second->GetRawMemberNum(); + } + return num; } diff --git a/server/gameserver/matchteam.h b/server/gameserver/matchteam.h index c032424..d8a08f1 100644 --- a/server/gameserver/matchteam.h +++ b/server/gameserver/matchteam.h @@ -27,7 +27,12 @@ class MatchTeam private: void Update(); + void UpdateMaster(); + void UpdateSlave(); void SyncMatchInfo(); + void TryCombineTeam(); + int GetPredictMemberNum(); + int GetRawMemberNum() { return raw_member_hash_.size(); }; private: int phase_= kMatchCombining;