From a1204c1dca4a902ec4c21e46b888ec96cb229f8c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 24 Mar 2022 11:44:12 +0800 Subject: [PATCH] 1 --- server/gameserver/human.cc | 5 +++++ server/gameserver/matchteam.cc | 32 +++++++++++++++++++++++++++++++- server/gameserver/matchteam.h | 1 + server/gameserver/roommgr.cc | 28 +++++++++++++++++++++------- server/gameserver/roommgr.h | 9 ++++++++- 5 files changed, 66 insertions(+), 9 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 3e70e77a..64785307 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2054,6 +2054,11 @@ void Human::SendBattleReport() std::string url; JsonDataMgr::Instance()->GetApiUrl(url); if (!f8::IsOnlineEnv()) { +#ifdef DEBUG + if (proto_version >= 2022032201) { + url = "https://game2006api-test.kingsome.cn/new/webapp/index.php"; + } +#endif } if (url.find('?') != std::string::npos) { url += "c=Battle&a=battleReport"; diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index e464e2a3..6d594820 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -417,6 +417,30 @@ bool MatchTeam::HasSameCurrMember(MatchTeam* b) return has; } +bool MatchTeam::ProtoIsCompatible(MatchTeam* b) +{ + bool is_compatible = true; + for (auto& a_member : curr_member_hash_) { + for (auto& b_member : b->curr_member_hash_) { + if (a_member->msg->proto_version() != 0 && + b_member->msg->proto_version() != 0 && + #ifdef DEBUG + ( + (a_member->msg->proto_version() < 2022032201 && b_member->msg->proto_version() >= 2022032201) || + (a_member->msg->proto_version() >= 2022032201 && b_member->msg->proto_version() < 2022032201) + ) + #else + false + #endif + ) { + is_compatible = false; + break; + } + } + } + return is_compatible; +} + bool MatchTeam::CanCombine(MatchTeam* b) { if (this == b) { @@ -502,6 +526,12 @@ bool MatchTeam::CanCombine(MatchTeam* b) if (HasSameCurrMember(b)) { #ifdef DEBUG a8::XPrintf("CanCombine 11\n", {}); +#endif + return false; + } + if (!ProtoIsCompatible(b)) { +#ifdef DEBUG + a8::XPrintf("CanCombine 12\n", {}); #endif return false; } @@ -582,7 +612,7 @@ void MatchTeam::StartGame() } std::string team_uuid = GetTeamUUid(); auto cb = - [team_uuid] (std::vector, int, std::string>>& results) + [team_uuid] (std::vector& results) { MatchTeam* team = MatchMgr::Instance()->GetTeam(team_uuid); if (team) { diff --git a/server/gameserver/matchteam.h b/server/gameserver/matchteam.h index cc259681..d4ef3703 100644 --- a/server/gameserver/matchteam.h +++ b/server/gameserver/matchteam.h @@ -76,6 +76,7 @@ class MatchTeam int GetPredictMemberNum(); int GetRawMemberNum() { return raw_member_hash_.size(); }; bool HasSameCurrMember(MatchTeam* b); + bool ProtoIsCompatible(MatchTeam* b); bool CanCombine(MatchTeam* b); bool IsShuaRobotTime(); void Combine(MatchTeam* b); diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 9a5be319..7c9902ca 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -155,7 +155,7 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) auto socket_handle = hdr.socket_handle; auto cb = [ip_saddr, socket_handle, join_msg] - (std::vector, int, std::string>>& results) + (std::vector& results) { cs::CMJoin& msg = *join_msg; if (RoomMgr::Instance()->IsLimitJoin()) { @@ -773,25 +773,39 @@ void RoomMgr::OnJoinResponse(JoinRequest* req) void RoomMgr::SendGetBattleData(std::vector>& join_msgs, std::function< - void(std::vector, int, std::string>>&)> cb) + void(std::vector&)> cb) { if (join_msgs.empty()) { abort(); } - std::vector, int, std::string>> result; + std::vector result; bool is_old_version = false; for (auto& msg : join_msgs) { if (msg->proto_version() < 2022032201) { is_old_version = true; break; } - result.push_back( - std::make_tuple(msg, 0, "") - ); + BattleDataContext context; + context.join_msg = msg; + result.push_back(context); } if (is_old_version) { cb(result); } + std::string url; + JsonDataMgr::Instance()->GetApiUrl(url); + if (!f8::IsOnlineEnv()) { +#ifdef DEBUG + if (!is_old_version) { + url = "https://game2006api-test.kingsome.cn/new/webapp/index.php"; + } +#endif + } + if (url.find('?') != std::string::npos) { + url += "c=Battle&a=getBattleData"; + } else { + url += "?c=Battle&a=getBattleData"; + } a8::MutableXObject* url_params = a8::MutableXObject::NewObject(); HttpProxy::Instance()->HttpGet ( @@ -802,7 +816,7 @@ void RoomMgr::SendGetBattleData(std::vector>& join_m [] (a8::XParams& param, const std::string& response) { }, - "", + url.c_str(), *url_params ); delete url_params; diff --git a/server/gameserver/roommgr.h b/server/gameserver/roommgr.h index 1c32205f..e27c4bc5 100644 --- a/server/gameserver/roommgr.h +++ b/server/gameserver/roommgr.h @@ -46,6 +46,13 @@ struct RoomInitInfo const std::vector* level0room_spec_things = nullptr; }; +struct BattleDataContext +{ + std::shared_ptr join_msg; + int errcode = 0; + std::string errmsg; +}; + class Room; class MatchTeam; class RoomMgr : public a8::Singleton @@ -73,7 +80,7 @@ class RoomMgr : public a8::Singleton void JoinTeam(MatchTeam* team); void SendGetBattleData(std::vector>& join_msgs, std::function< - void(std::vector, int, std::string>>&)> cb); + void(std::vector&)> cb); private: void InstallReportStateTimer();