diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index 4a720106..e464e2a3 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -574,24 +574,26 @@ void MatchTeam::StartGame() { phase_ = kMatchWaitStart; if (GetValidSocketNum() > 0) { - RoomMgr::Instance()->JoinTeam(this); - } - for (auto& member : curr_member_hash_) { - if (member->socket_handle != 0) { - MatchMgr::Instance()->RemoveSocket(member->socket_handle); + std::vector> join_msgs; + for (auto& member : GetCurrMembers()) { + if (!member->is_robot) { + join_msgs.push_back(member->msg); + } } + std::string team_uuid = GetTeamUUid(); + auto cb = + [team_uuid] (std::vector, int, std::string>>& results) + { + MatchTeam* team = MatchMgr::Instance()->GetTeam(team_uuid); + if (team) { + RoomMgr::Instance()->JoinTeam(team); + team->RemoveTeam(); + } + }; + RoomMgr::Instance()->SendGetBattleData(join_msgs, cb); + } else { + RemoveTeam(); } - for (auto& pair : combined_team_hash_) { - MatchMgr::Instance()->RemoveTeam(pair.first); - } - MatchMgr::Instance()->RemoveTeam(GetTeamUUid()); - - std::vector> join_msgs; - auto cb = - [] (std::vector>& results) - { - }; - RoomMgr::Instance()->SendGetBattleData(join_msgs, cb); } void MatchTeam::ChooseLeader() @@ -727,3 +729,16 @@ int MatchTeam::GetValidSocketNum() } return valid_socket_num; } + +void MatchTeam::RemoveTeam() +{ + for (auto& member : curr_member_hash_) { + if (member->socket_handle != 0) { + MatchMgr::Instance()->RemoveSocket(member->socket_handle); + } + } + for (auto& pair : combined_team_hash_) { + MatchMgr::Instance()->RemoveTeam(pair.first); + } + MatchMgr::Instance()->RemoveTeam(GetTeamUUid()); +} diff --git a/server/gameserver/matchteam.h b/server/gameserver/matchteam.h index 2e25a03f..cc259681 100644 --- a/server/gameserver/matchteam.h +++ b/server/gameserver/matchteam.h @@ -93,6 +93,7 @@ class MatchTeam void CheckChoose(); void CheckPrepare(); int GetValidSocketNum(); + void RemoveTeam(); private: long long phase_start_tick_ = 0; diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 3a649728..7c249c77 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -153,7 +153,8 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) auto ip_saddr = hdr.ip_saddr; auto socket_handle = hdr.socket_handle; auto cb = - [ip_saddr, socket_handle, join_msg] (std::vector>& results) + [ip_saddr, socket_handle, join_msg] + (std::vector, int, std::string>>& results) { cs::CMJoin& msg = *join_msg; if (RoomMgr::Instance()->IsLimitJoin()) { @@ -769,7 +770,8 @@ void RoomMgr::OnJoinResponse(JoinRequest* req) #endif void RoomMgr::SendGetBattleData(std::vector>& join_msgs, - std::function>&)> cb) + std::function< + void(std::vector, int, std::string>>&)> cb) { } diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index 9538f266..1c32205f 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -72,7 +72,8 @@ class RoomMgr : public a8::Singleton bool IsGM(const std::string& account_id); void JoinTeam(MatchTeam* team); void SendGetBattleData(std::vector>& join_msgs, - std::function>&)> cb); + std::function< + void(std::vector, int, std::string>>&)> cb); private: void InstallReportStateTimer();