Skip to content

Commit cec956c

Browse files
committed
Move kart and map handling into another unit, kinda
Only slightly tested for now, and no optimizations were applied.
1 parent ec07897 commit cec956c

8 files changed

+794
-499
lines changed

src/network/protocols/command_manager.cpp

+31-53
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "utils/file_utils.hpp"
3636
#include "utils/hit_processor.hpp"
3737
#include "utils/hourglass_reason.hpp"
38+
#include "utils/lobby_asset_manager.hpp"
3839
#include "utils/log.hpp"
3940
#include "utils/random_generator.hpp"
4041
#include "utils/string_utils.hpp"
@@ -608,6 +609,8 @@ CommandManager::CommandManager(ServerLobby* lobby):
608609
initCommands();
609610
initAssets();
610611

612+
m_asset_manager = lobby->getLobbyAssetManager();
613+
611614
m_aux_mode_aliases = {
612615
{"m0"},
613616
{"m1"},
@@ -1313,10 +1316,10 @@ void CommandManager::process_addons(Context& context)
13131316
// removed const reference so that I can modify `from`
13141317
// without changing the original container, we copy everything anyway
13151318
std::set<std::string> from =
1316-
(argv[1] == "kart" ? m_lobby->m_addon_kts.first :
1317-
(argv[1] == "track" ? m_lobby->m_addon_kts.second :
1318-
(argv[1] == "arena" ? m_lobby->m_addon_arenas :
1319-
/*argv[1] == "soccer" ?*/ m_lobby->m_addon_soccers
1319+
(argv[1] == "kart" ? m_asset_manager->getAddonKarts() :
1320+
(argv[1] == "track" ? m_asset_manager->getAddonTracks() :
1321+
(argv[1] == "arena" ? m_asset_manager->getAddonArenas() :
1322+
/*argv[1] == "soccer" ?*/ m_asset_manager->getAddonSoccers()
13201323
)));
13211324
if (apply_filters)
13221325
m_lobby->applyAllFilters(from, false); // happily the type is never karts in this line
@@ -1457,13 +1460,13 @@ void CommandManager::process_checkaddon(Context& context)
14571460
unsigned server_status = 0;
14581461
std::vector<std::string> players[4];
14591462

1460-
if (m_lobby->m_addon_kts.first.count(id))
1463+
if (m_asset_manager->hasAddonKart(id))
14611464
server_status |= HAS_KART;
1462-
if (m_lobby->m_addon_kts.second.count(id))
1465+
if (m_asset_manager->hasAddonTrack(id))
14631466
server_status |= HAS_MAP;
1464-
if (m_lobby->m_addon_arenas.count(id))
1467+
if (m_asset_manager->hasAddonArena(id))
14651468
server_status |= HAS_MAP;
1466-
if (m_lobby->m_addon_soccers.count(id))
1469+
if (m_asset_manager->hasAddonSoccer(id))
14671470
server_status |= HAS_MAP;
14681471

14691472
auto peers = STKHost::get()->getPeers();
@@ -1616,22 +1619,26 @@ void CommandManager::process_lsa(Context& context)
16161619
if (type.empty() || // not specify addon type
16171620
(!type.empty() && type.compare("kart") == 0)) // list kart addon
16181621
{
1619-
total_addons.insert(m_lobby->m_addon_kts.first.begin(), m_lobby->m_addon_kts.first.end());
1622+
const auto& collection = m_asset_manager->getAddonKarts();
1623+
total_addons.insert(collection.begin(), collection.end());
16201624
}
16211625
if (type.empty() || // not specify addon type
16221626
(!type.empty() && type.compare("track") == 0))
16231627
{
1624-
total_addons.insert(m_lobby->m_addon_kts.second.begin(), m_lobby->m_addon_kts.second.end());
1628+
const auto& collection = m_asset_manager->getAddonTracks();
1629+
total_addons.insert(collection.begin(), collection.end());
16251630
}
16261631
if (type.empty() || // not specify addon type
16271632
(!type.empty() && type.compare("arena") == 0))
16281633
{
1629-
total_addons.insert(m_lobby->m_addon_arenas.begin(), m_lobby->m_addon_arenas.end());
1634+
const auto& collection = m_asset_manager->getAddonArenas();
1635+
total_addons.insert(collection.begin(), collection.end());
16301636
}
16311637
if (type.empty() || // not specify addon type
16321638
(!type.empty() && type.compare("soccer") == 0))
16331639
{
1634-
total_addons.insert(m_lobby->m_addon_soccers.begin(), m_lobby->m_addon_soccers.end());
1640+
const auto& collection = m_asset_manager->getAddonSoccers();
1641+
total_addons.insert(collection.begin(), collection.end());
16351642
}
16361643
std::string msg = "";
16371644
for (auto& addon : total_addons)
@@ -1992,10 +1999,15 @@ void CommandManager::process_sha(Context& context)
19921999
return;
19932000
}
19942001
std::set<std::string> total_addons;
1995-
total_addons.insert(m_lobby->m_addon_kts.first.begin(), m_lobby->m_addon_kts.first.end());
1996-
total_addons.insert(m_lobby->m_addon_kts.second.begin(), m_lobby->m_addon_kts.second.end());
1997-
total_addons.insert(m_lobby->m_addon_arenas.begin(), m_lobby->m_addon_arenas.end());
1998-
total_addons.insert(m_lobby->m_addon_soccers.begin(), m_lobby->m_addon_soccers.end());
2002+
2003+
const auto all_karts = m_asset_manager->getAddonKarts();
2004+
const auto all_tracks = m_asset_manager->getAddonTracks();
2005+
const auto all_arenas = m_asset_manager->getAddonArenas();
2006+
const auto all_soccers = m_asset_manager->getAddonSoccers();
2007+
total_addons.insert(all_karts.begin(), all_karts.end());
2008+
total_addons.insert(all_tracks.begin(), all_tracks.end());
2009+
total_addons.insert(all_arenas.begin(), all_arenas.end());
2010+
total_addons.insert(all_soccers.begin(), all_soccers.end());
19992011
std::string addon_id_test = Addon::createAddonId(argv[1]);
20002012
bool found = total_addons.find(addon_id_test) != total_addons.end();
20012013
if (found)
@@ -2160,7 +2172,7 @@ void CommandManager::process_gnu(Context& context)
21602172
if (peer)
21612173
{
21622174
kart = "gnu";
2163-
if (argv.size() > 1 && m_lobby->m_available_kts.first.count(argv[1]) > 0)
2175+
if (argv.size() > 1 && m_asset_manager->isKartAvailable(argv[1]))
21642176
{
21652177
kart = argv[1];
21662178
}
@@ -2569,9 +2581,9 @@ void CommandManager::process_queue_push(Context& context)
25692581
bool to_front = (argv[1] == "push_front");
25702582

25712583
if (argv.size() == 3 && argv[2] == "-") // kept until there's filter-type replacement
2572-
argv[2] = getRandomMap();
2584+
argv[2] = m_asset_manager->getRandomMap();
25732585
else if (argv.size() == 3 && argv[2] == "-addon") // kept until there's filter-type replacement
2574-
argv[2] = getRandomAddonMap();
2586+
argv[2] = m_asset_manager->getRandomAddonMap();
25752587

25762588
std::string filter_text = "";
25772589
CommandManager::restoreCmdByArgv(filter_text, argv, ' ', '"', '"', '\\', 2);
@@ -4251,40 +4263,6 @@ bool CommandManager::assignRandomTeams(int intended_number,
42514263
} // assignRandomTeams
42524264
// ========================================================================
42534265

4254-
std::string CommandManager::getRandomMap() const
4255-
{
4256-
std::set<std::string> items;
4257-
for (const std::string& s: m_lobby->m_entering_kts.second) {
4258-
items.insert(s);
4259-
}
4260-
m_lobby->applyAllFilters(items, false);
4261-
if (items.empty())
4262-
return "";
4263-
RandomGenerator rg;
4264-
std::set<std::string>::iterator it = items.begin();
4265-
std::advance(it, rg.get((int)items.size()));
4266-
return *it;
4267-
} // getRandomMap
4268-
// ========================================================================
4269-
4270-
std::string CommandManager::getRandomAddonMap() const
4271-
{
4272-
std::set<std::string> items;
4273-
for (const std::string& s: m_lobby->m_entering_kts.second) {
4274-
Track* t = track_manager->getTrack(s);
4275-
if (t->isAddon())
4276-
items.insert(s);
4277-
}
4278-
m_lobby->applyAllFilters(items, false);
4279-
if (items.empty())
4280-
return "";
4281-
RandomGenerator rg;
4282-
std::set<std::string>::iterator it = items.begin();
4283-
std::advance(it, rg.get((int)items.size()));
4284-
return *it;
4285-
} // getRandomAddonMap
4286-
// ========================================================================
4287-
42884266
void CommandManager::addUser(std::string& s)
42894267
{
42904268
m_users.insert(s);

src/network/protocols/command_manager.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
class ServerLobby;
5050
class Event;
5151
class STKPeer;
52+
class LobbyAssetManager;
5253

5354
class CommandManager
5455
{
@@ -197,6 +198,8 @@ class CommandManager
197198

198199
ServerLobby* m_lobby;
199200

201+
std::shared_ptr<LobbyAssetManager> m_asset_manager;
202+
200203
std::vector<std::weak_ptr<Command>> m_all_commands;
201204

202205
std::map<std::string, std::weak_ptr<Command>> m_full_name_to_command;
@@ -349,9 +352,6 @@ class CommandManager
349352
void process_available_teams_assign(Context& context);
350353
void special(Context& context);
351354

352-
std::string getRandomMap() const;
353-
std::string getRandomAddonMap() const;
354-
355355
public:
356356

357357
CommandManager(ServerLobby* lobby = nullptr);

src/network/protocols/ranking.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1818

1919
#include "network/protocols/ranking.hpp"
20+
#include "online/request_manager.hpp"
2021
#include "io/xml_node.hpp"
2122
#include "utils/log.hpp"
2223
#include "utils/time.hpp"
@@ -38,6 +39,31 @@ namespace
3839
const double HANDICAP_OFFSET = 2000.0;
3940
}
4041

42+
SubmitRankingRequest::SubmitRankingRequest(const RankingEntry& entry,
43+
const std::string& country_code)
44+
: XMLRequest(Online::RequestManager::HTTP_MAX_PRIORITY)
45+
{
46+
addParameter("id", entry.online_id);
47+
addParameter("scores", entry.score);
48+
addParameter("max-scores", entry.max_score);
49+
addParameter("num-races-done", entry.races);
50+
addParameter("raw-scores", entry.raw_score);
51+
addParameter("rating-deviation", entry.deviation);
52+
addParameter("disconnects", entry.disconnects);
53+
addParameter("country-code", country_code);
54+
}
55+
56+
void SubmitRankingRequest::afterOperation()
57+
{
58+
Online::XMLRequest::afterOperation();
59+
const XMLNode* result = getXMLData();
60+
std::string rec_success;
61+
if (!(result->get("success", &rec_success) &&
62+
rec_success == "yes"))
63+
{
64+
Log::error("ServerLobby", "Failed to submit scores.");
65+
}
66+
}
4167

4268
//-----------------------------------------------------------------------------
4369
RankingEntry::RankingEntry(uint32_t online_id): online_id(online_id)

src/network/protocols/ranking.hpp

+10
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919
#ifndef RANKING_HPP
2020
#define RANKING_HPP
2121

22+
#include "online/xml_request.hpp"
2223
#include <map>
2324
#include <memory>
2425
#include <vector>
2526

2627
class XMLNode;
2728
class NetworkPlayerProfile;
2829

30+
2931
struct RankingEntry
3032
{
3133
uint32_t online_id;
@@ -52,6 +54,14 @@ struct RankingEntryAndProfile
5254
std::weak_ptr<NetworkPlayerProfile> profile;
5355
};
5456

57+
class SubmitRankingRequest : public Online::XMLRequest
58+
{
59+
public:
60+
SubmitRankingRequest(const RankingEntry& entry,
61+
const std::string& country_code);
62+
virtual void afterOperation();
63+
};
64+
5565
class Ranking
5666
{
5767
private:

0 commit comments

Comments
 (0)