1
This commit is contained in:
parent
27a7bdc6a6
commit
8f2a0c7f99
@ -30,6 +30,7 @@ void MatchMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg)
|
||||
team = new MatchTeam();
|
||||
team->Init(hdr, msg);
|
||||
team_hash_[msg.team_uuid()] = team;
|
||||
team->TryCombineTeam();
|
||||
} else {
|
||||
team->AddRawMember(hdr, msg);
|
||||
}
|
||||
|
@ -36,11 +36,6 @@ void MatchTeam::Init(f8::MsgHdr& hdr, const cs::CMJoin& msg)
|
||||
},
|
||||
&timer_attacher.timer_list_);
|
||||
AddRawMember(hdr, msg);
|
||||
{
|
||||
if (GetPredictMemberNum() < MAX_TEAM_NUM) {
|
||||
TryCombineTeam();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MatchTeam::AddRawMember(f8::MsgHdr& hdr, const cs::CMJoin& msg)
|
||||
@ -94,6 +89,7 @@ void MatchTeam::SyncMatchInfo()
|
||||
|
||||
void MatchTeam::TryCombineTeam()
|
||||
{
|
||||
if (GetPredictMemberNum() < MAX_TEAM_NUM) {
|
||||
MatchTeam* matched_team = nullptr;
|
||||
MatchMgr::Instance()->TraverseTeam
|
||||
(
|
||||
@ -102,7 +98,15 @@ void MatchTeam::TryCombineTeam()
|
||||
if (team == this) {
|
||||
return;
|
||||
}
|
||||
if (CanCombine(team)) {
|
||||
matched_team = team;
|
||||
stop = true;
|
||||
}
|
||||
});
|
||||
if (matched_team) {
|
||||
Combine(matched_team);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MatchTeam::UpdateMaster()
|
||||
@ -164,3 +168,76 @@ int MatchTeam::GetPredictMemberNum()
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
bool MatchTeam::HasSameCurrMember(MatchTeam* b)
|
||||
{
|
||||
bool has = false;
|
||||
for (auto& a_member : curr_member_hash_) {
|
||||
for (auto& b_member : b->curr_member_hash_) {
|
||||
if (a_member->msg.account_id() == b_member->msg.account_id()) {
|
||||
has = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return has;
|
||||
}
|
||||
|
||||
bool MatchTeam::CanCombine(MatchTeam* b)
|
||||
{
|
||||
if (this == b) {
|
||||
return false;
|
||||
}
|
||||
//已合并
|
||||
if (master_team_ != this){
|
||||
return false;
|
||||
}
|
||||
//已合并
|
||||
if (b->master_team_ != b) {
|
||||
return false;
|
||||
}
|
||||
if (phase_ != kMatchCombining) {
|
||||
return false;
|
||||
}
|
||||
if (b->phase_ != kMatchCombining) {
|
||||
return false;
|
||||
}
|
||||
if (IsShuaRobotTime()) {
|
||||
return false;
|
||||
}
|
||||
if (b->IsShuaRobotTime()) {
|
||||
return false;
|
||||
}
|
||||
if (!b->combined_team_hash_.empty()) {
|
||||
return false;
|
||||
}
|
||||
if (GetPredictMemberNum() + b->GetPredictMemberNum() > MAX_TEAM_NUM) {
|
||||
return false;
|
||||
}
|
||||
if (combined_team_hash_.find(b->GetTeamUUid()) != combined_team_hash_.end()) {
|
||||
return false;
|
||||
}
|
||||
if (HasSameCurrMember(b)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void MatchTeam::Combine(MatchTeam* b)
|
||||
{
|
||||
combined_team_hash_[b->GetTeamUUid()] = b;
|
||||
b->master_team_ = this;
|
||||
for (auto& member : b->curr_member_hash_) {
|
||||
curr_member_hash_.push_back(member);
|
||||
}
|
||||
}
|
||||
|
||||
std::string MatchTeam::GetTeamUUid()
|
||||
{
|
||||
return first_member_->msg.team_uuid();
|
||||
}
|
||||
|
||||
bool MatchTeam::IsShuaRobotTime()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -24,15 +24,20 @@ class MatchTeam
|
||||
void AddRawMember(f8::MsgHdr& hdr, const cs::CMJoin& msg);
|
||||
bool IsRawMember(const std::string& account_id);
|
||||
bool IsValidMember(const cs::CMJoin& msg);
|
||||
void TryCombineTeam();
|
||||
std::string GetTeamUUid();
|
||||
|
||||
private:
|
||||
void Update();
|
||||
void UpdateMaster();
|
||||
void UpdateSlave();
|
||||
void SyncMatchInfo();
|
||||
void TryCombineTeam();
|
||||
int GetPredictMemberNum();
|
||||
int GetRawMemberNum() { return raw_member_hash_.size(); };
|
||||
bool HasSameCurrMember(MatchTeam* b);
|
||||
bool CanCombine(MatchTeam* b);
|
||||
bool IsShuaRobotTime();
|
||||
void Combine(MatchTeam* b);
|
||||
|
||||
private:
|
||||
int phase_= kMatchCombining;
|
||||
|
Loading…
x
Reference in New Issue
Block a user