1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-21 05:53:02 +01:00

Improve network module in more C++ way

This commit is contained in:
skdltmxn
2022-02-10 05:57:25 +09:00
committed by GitHub
parent 052da74760
commit 29083f4cb2
19 changed files with 120 additions and 171 deletions

View File

@@ -23,7 +23,7 @@
constexpr const utf8* USER_STORE_FILENAME = "users.json";
NetworkUser* NetworkUser::FromJson(json_t& jsonData)
std::unique_ptr<NetworkUser> NetworkUser::FromJson(const json_t& jsonData)
{
Guard::Assert(jsonData.is_object(), "NetworkUser::FromJson expects parameter jsonData to be object");
@@ -31,10 +31,10 @@ NetworkUser* NetworkUser::FromJson(json_t& jsonData)
const std::string name = Json::GetString(jsonData["name"]);
json_t jsonGroupId = jsonData["groupId"];
NetworkUser* user = nullptr;
std::unique_ptr<NetworkUser> user = nullptr;
if (!hash.empty() && !name.empty())
{
user = new NetworkUser();
user = std::make_unique<NetworkUser>();
user->Hash = hash;
user->Name = name;
if (jsonGroupId.is_number_integer())
@@ -62,39 +62,25 @@ json_t NetworkUser::ToJson() const
return jsonData;
}
NetworkUserManager::~NetworkUserManager()
{
DisposeUsers();
}
void NetworkUserManager::DisposeUsers()
{
for (const auto& kvp : _usersByHash)
{
delete kvp.second;
}
_usersByHash.clear();
}
void NetworkUserManager::Load()
{
const auto path = GetStorePath();
if (File::Exists(path))
{
DisposeUsers();
_usersByHash.clear();
try
{
json_t jsonUsers = Json::ReadFromFile(path);
for (auto& jsonUser : jsonUsers)
for (const auto& jsonUser : jsonUsers)
{
if (jsonUser.is_object())
{
auto networkUser = NetworkUser::FromJson(jsonUser);
if (networkUser != nullptr)
{
_usersByHash[networkUser->Hash] = networkUser;
_usersByHash[networkUser->Hash] = std::move(networkUser);
}
}
}
@@ -154,7 +140,7 @@ void NetworkUserManager::Save()
// Add new users
for (const auto& kvp : _usersByHash)
{
const NetworkUser* networkUser = kvp.second;
const auto& networkUser = kvp.second;
if (!networkUser->Remove && savedHashes.find(networkUser->Hash) == savedHashes.end())
{
jsonUsers.push_back(networkUser->ToJson());
@@ -168,7 +154,7 @@ void NetworkUserManager::UnsetUsersOfGroup(uint8_t groupId)
{
for (const auto& kvp : _usersByHash)
{
NetworkUser* networkUser = kvp.second;
auto& networkUser = kvp.second;
if (networkUser->GroupId.has_value() && *networkUser->GroupId == groupId)
{
networkUser->GroupId = std::nullopt;
@@ -178,29 +164,19 @@ void NetworkUserManager::UnsetUsersOfGroup(uint8_t groupId)
void NetworkUserManager::RemoveUser(const std::string& hash)
{
NetworkUser* networkUser = GetUserByHash(hash);
NetworkUser* networkUser = const_cast<NetworkUser*>(GetUserByHash(hash));
if (networkUser != nullptr)
{
networkUser->Remove = true;
}
}
NetworkUser* NetworkUserManager::GetUserByHash(const std::string& hash)
{
auto it = _usersByHash.find(hash);
if (it != _usersByHash.end())
{
return it->second;
}
return nullptr;
}
const NetworkUser* NetworkUserManager::GetUserByHash(const std::string& hash) const
{
auto it = _usersByHash.find(hash);
if (it != _usersByHash.end())
{
return it->second;
return it->second.get();
}
return nullptr;
}
@@ -209,10 +185,10 @@ const NetworkUser* NetworkUserManager::GetUserByName(const std::string& name) co
{
for (const auto& kvp : _usersByHash)
{
const NetworkUser* networkUser = kvp.second;
const auto& networkUser = kvp.second;
if (String::Equals(name.c_str(), networkUser->Name.c_str(), true))
{
return networkUser;
return networkUser.get();
}
}
return nullptr;
@@ -220,12 +196,13 @@ const NetworkUser* NetworkUserManager::GetUserByName(const std::string& name) co
NetworkUser* NetworkUserManager::GetOrAddUser(const std::string& hash)
{
NetworkUser* networkUser = GetUserByHash(hash);
NetworkUser* networkUser = const_cast<NetworkUser*>(GetUserByHash(hash));
if (networkUser == nullptr)
{
networkUser = new NetworkUser();
networkUser->Hash = hash;
_usersByHash[hash] = networkUser;
auto newNetworkUser = std::make_unique<NetworkUser>();
newNetworkUser->Hash = hash;
networkUser = newNetworkUser.get();
_usersByHash[hash] = std::move(newNetworkUser);
}
return networkUser;
}