From cce23b2d65cffb267509277e26b69a6d8a066b73 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 15 May 2019 10:25:28 +0800 Subject: [PATCH] masterserver ok --- server/masterserver/CMakeLists.txt | 2 +- server/masterserver/GGListener.cc | 2 -- server/masterserver/gsmgr.cc | 23 ++++++++++++++++++----- server/masterserver/gsmgr.h | 4 +++- server/masterserver/handlermgr.cc | 1 - server/masterserver/types.cc | 1 - 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/server/masterserver/CMakeLists.txt b/server/masterserver/CMakeLists.txt index a0d0637..8c97cfe 100644 --- a/server/masterserver/CMakeLists.txt +++ b/server/masterserver/CMakeLists.txt @@ -54,7 +54,7 @@ add_executable( add_custom_target(script_pb_protocol ALL) add_custom_command(TARGET script_pb_protocol PRE_BUILD - COMMAND python ../../third_party/tools/scripts/construct/build_pb.py --cpp_out=. --pb_files=cs_proto,cs_msgid,ss_proto,ss_msgid,metatable --python_out=../tools/robot/virtualclient + COMMAND python ../../third_party/tools/scripts/construct/build_pb.py --cpp_out=. --pb_files=ss_proto,ss_msgid ) add_dependencies(masterserver script_pb_protocol) diff --git a/server/masterserver/GGListener.cc b/server/masterserver/GGListener.cc index d823e28..455166a 100644 --- a/server/masterserver/GGListener.cc +++ b/server/masterserver/GGListener.cc @@ -9,8 +9,6 @@ #include "app.h" #include "GGListener.h" #include "jsondatamgr.h" -#include "cs_proto.pb.h" -#include "cs_msgid.pb.h" #include "handlermgr.h" class GCClientSession: public a8::MixedSession diff --git a/server/masterserver/gsmgr.cc b/server/masterserver/gsmgr.cc index fc83170..c383600 100644 --- a/server/masterserver/gsmgr.cc +++ b/server/masterserver/gsmgr.cc @@ -18,8 +18,9 @@ void GSMgr::UnInit() void GSMgr::_SS_WSP_RequestTargetServer(f8::MsgHdr& hdr, const ss::SS_WSP_RequestTargetServer& msg) { ss::SS_MS_ResponseTargetServer respmsg; + respmsg.set_context_id(msg.context_id()); GSNode* node = GetNodeByTeamId(msg.team_id()); - if (!node) { + if (node) { respmsg.set_host(node->ip); respmsg.set_port(node->port); } else { @@ -42,8 +43,8 @@ void GSMgr::___GSReport(f8::JsonHttpRequest* request) int room_num = request->request.Get("room_num"); std::string key = ip + a8::XValue(port).GetString(); - auto itr = node_hash_.find(key); - if (itr != node_hash_.end()) { + auto itr = node_key_hash_.find(key); + if (itr != node_key_hash_.end()) { itr->second.online_num = online_num; itr->second.room_num = room_num; } else { @@ -53,7 +54,7 @@ void GSMgr::___GSReport(f8::JsonHttpRequest* request) gs.room_num = room_num; gs.ip = ip; gs.port = port; - node_hash_[key] = gs; + node_key_hash_[key] = gs; } request->resp_xobj->SetVal("errcode", 0); @@ -68,5 +69,17 @@ GSNode* GSMgr::GetNodeByTeamId(const std::string& team_id) GSNode* GSMgr::AllocNode() { - + std::array nodes = {}; + size_t i = 0; + for (auto& pair : node_desc_hash_) { + nodes[i] = &pair.second; + ++i; + if (i >= nodes.size()) { + break; + } + } + if (i <= 0) { + return nullptr; + } + return nodes[rand() % i]; } diff --git a/server/masterserver/gsmgr.h b/server/masterserver/gsmgr.h index 7c3dce3..2af62bb 100644 --- a/server/masterserver/gsmgr.h +++ b/server/masterserver/gsmgr.h @@ -5,6 +5,7 @@ struct GSNode { std::string key; + unsigned short node_idx = 0; int room_num = 0; int online_num = 0; std::string ip; @@ -36,5 +37,6 @@ class GSMgr : public a8::Singleton private: std::map team_hash_; - std::map node_hash_; + std::map node_key_hash_; + std::map node_desc_hash_; }; diff --git a/server/masterserver/handlermgr.cc b/server/masterserver/handlermgr.cc index 56547c1..84a8b8e 100644 --- a/server/masterserver/handlermgr.cc +++ b/server/masterserver/handlermgr.cc @@ -6,7 +6,6 @@ #include "GGListener.h" #include "app.h" -#include "cs_proto.pb.h" #include "gsmgr.h" static void _GMOpsSelfChecking(f8::JsonHttpRequest* request) diff --git a/server/masterserver/types.cc b/server/masterserver/types.cc index 015e742..981bc36 100644 --- a/server/masterserver/types.cc +++ b/server/masterserver/types.cc @@ -1,4 +1,3 @@ #include "precompile.h" -#include "cs_proto.pb.h"