diff --git a/server/masterserver/gsmgr.cc b/server/masterserver/gsmgr.cc index 95d9d0e..b19df7d 100644 --- a/server/masterserver/gsmgr.cc +++ b/server/masterserver/gsmgr.cc @@ -68,6 +68,7 @@ void GSMgr::___GSReport(f8::JsonHttpRequest* request) itr->second.last_active_tick = a8::XGetTickCount(); } else { GSNode gs; + gs.key = key; gs.node_id = node_id; gs.instance_id = instance_id; gs.online_num = online_num; @@ -87,25 +88,48 @@ void GSMgr::___GSReport(f8::JsonHttpRequest* request) void GSMgr::___GSList(f8::JsonHttpRequest* request) { - a8::MutableXObject* node_list = a8::MutableXObject::NewArray(); + { + a8::MutableXObject* node_list = a8::MutableXObject::NewArray(); - for (auto& pair : node_key_hash_) { - a8::MutableXObject* node = a8::MutableXObject::NewObject(); - node->SetVal("node_id", pair.second.node_id); - node->SetVal("instance_id", pair.second.instance_id); - node->SetVal("room_num", pair.second.room_num); - node->SetVal("online_num", pair.second.online_num); - node->SetVal("ip", pair.second.ip); - node->SetVal("port", pair.second.port); - node->SetVal("servicing", pair.second.servicing); - node_list->Push(*node); - delete node; + for (auto& pair : node_key_hash_) { + a8::MutableXObject* node = a8::MutableXObject::NewObject(); + node->SetVal("node_id", pair.second.node_id); + node->SetVal("instance_id", pair.second.instance_id); + node->SetVal("room_num", pair.second.room_num); + node->SetVal("online_num", pair.second.online_num); + node->SetVal("ip", pair.second.ip); + node->SetVal("port", pair.second.port); + node->SetVal("servicing", pair.second.servicing); + node_list->Push(*node); + delete node; + } + + request->resp_xobj->SetVal("errcode", 0); + request->resp_xobj->SetVal("errmsg", ""); + request->resp_xobj->SetVal("node_list", *node_list); + delete node_list; } + { + a8::MutableXObject* node_list = a8::MutableXObject::NewArray(); - request->resp_xobj->SetVal("errcode", 0); - request->resp_xobj->SetVal("errmsg", ""); - request->resp_xobj->SetVal("node_list", *node_list); - delete node_list; + for (GSNode* gs_node : node_sorted_list_) { + a8::MutableXObject* node = a8::MutableXObject::NewObject(); + node->SetVal("node_id", gs_node->node_id); + node->SetVal("instance_id", gs_node->instance_id); + node->SetVal("room_num", gs_node->room_num); + node->SetVal("online_num", gs_node->online_num); + node->SetVal("ip", gs_node->ip); + node->SetVal("port", gs_node->port); + node->SetVal("servicing", gs_node->servicing); + node_list->Push(*node); + delete node; + } + + request->resp_xobj->SetVal("errcode", 0); + request->resp_xobj->SetVal("errmsg", ""); + request->resp_xobj->SetVal("sorted_node_list", *node_list); + delete node_list; + } } GSNode* GSMgr::GetNodeByTeamId(const std::string& team_id) @@ -135,11 +159,19 @@ void GSMgr::RearrangeNode() std::sort(node_sorted_list_.begin(), node_sorted_list_.end(), [] (const GSNode* a, const GSNode* b) { - return - !b->servicing || - a->online_num < b->online_num || - a->room_num < b->room_num || - a->node_idx > b->node_idx; + if (a->servicing && b->servicing) { + return + a->online_num < b->online_num || + a->room_num < b->room_num || + a->node_idx > b->node_idx; + } + if (a->servicing) { + return true; + } + if (b->servicing) { + return false; + } + return a->node_idx > b->node_idx; } ); } diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 4543f1e..ba038a0 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -627,6 +627,7 @@ message CMJoin optional string session_id = 20; //session_id optional string from_appid = 21; //from_appid optional float atk_add = 22; //攻击加成 + optional string pre_settlement_info = 23; //透传game2001api预结算信息(为了本地结算用) } //移动