mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 19:13:07 +01:00
Refactor NetworkBase to use new JSON library
This commit is contained in:
@@ -960,24 +960,23 @@ void NetworkBase::SaveGroups()
|
||||
platform_get_user_directory(path, nullptr, sizeof(path));
|
||||
safe_strcat_path(path, "groups.json", sizeof(path));
|
||||
|
||||
json_t* jsonGroupsCfg = json_object();
|
||||
json_t* jsonGroups = json_array();
|
||||
json_t jsonGroups = json_t::array();
|
||||
for (auto& group : group_list)
|
||||
{
|
||||
json_array_append_new(jsonGroups, group->ToJson());
|
||||
jsonGroups.push_back(group->ToJson());
|
||||
}
|
||||
json_object_set_new(jsonGroupsCfg, "default_group", json_integer(default_group));
|
||||
json_object_set_new(jsonGroupsCfg, "groups", jsonGroups);
|
||||
json_t jsonGroupsCfg = {
|
||||
{ "default_group", default_group },
|
||||
{ "groups", jsonGroups },
|
||||
};
|
||||
try
|
||||
{
|
||||
Json::WriteToFile(path, jsonGroupsCfg, JSON_INDENT(4) | JSON_PRESERVE_ORDER);
|
||||
Json::WriteToFile(path, jsonGroupsCfg);
|
||||
}
|
||||
catch (const std::exception& ex)
|
||||
{
|
||||
log_error("Unable to save %s: %s", path, ex.what());
|
||||
}
|
||||
|
||||
json_decref(jsonGroupsCfg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1023,12 +1022,12 @@ void NetworkBase::LoadGroups()
|
||||
platform_get_user_directory(path, nullptr, sizeof(path));
|
||||
safe_strcat_path(path, "groups.json", sizeof(path));
|
||||
|
||||
json_t* json = nullptr;
|
||||
json_t jsonGroupConfig;
|
||||
if (Platform::FileExists(path))
|
||||
{
|
||||
try
|
||||
{
|
||||
json = Json::ReadFromFile(path);
|
||||
jsonGroupConfig = Json::ReadFromFile(path);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
@@ -1036,28 +1035,26 @@ void NetworkBase::LoadGroups()
|
||||
}
|
||||
}
|
||||
|
||||
if (json == nullptr)
|
||||
if (!jsonGroupConfig.is_object())
|
||||
{
|
||||
SetupDefaultGroups();
|
||||
}
|
||||
else
|
||||
{
|
||||
json_t* json_groups = json_object_get(json, "groups");
|
||||
size_t groupCount = json_array_size(json_groups);
|
||||
for (size_t i = 0; i < groupCount; i++)
|
||||
json_t jsonGroups = jsonGroupConfig["groups"];
|
||||
if (jsonGroups.is_array())
|
||||
{
|
||||
json_t* jsonGroup = json_array_get(json_groups, i);
|
||||
|
||||
auto newgroup = std::make_unique<NetworkGroup>(NetworkGroup::FromJson(jsonGroup));
|
||||
group_list.push_back(std::move(newgroup));
|
||||
for (auto& jsonGroup : jsonGroups)
|
||||
{
|
||||
group_list.emplace_back(std::make_unique<NetworkGroup>(NetworkGroup::FromJson(jsonGroup)));
|
||||
}
|
||||
}
|
||||
json_t* jsonDefaultGroup = json_object_get(json, "default_group");
|
||||
default_group = static_cast<uint8_t>(json_integer_value(jsonDefaultGroup));
|
||||
|
||||
default_group = Json::GetNumber<uint8_t>(jsonGroupConfig["default_group"]);
|
||||
if (GetGroupByID(default_group) == nullptr)
|
||||
{
|
||||
default_group = 0;
|
||||
}
|
||||
json_decref(json);
|
||||
}
|
||||
|
||||
// Host group should always contain all permissions.
|
||||
@@ -1594,37 +1591,35 @@ void NetworkBase::Server_Send_SETDISCONNECTMSG(NetworkConnection& connection, co
|
||||
connection.QueuePacket(std::move(packet));
|
||||
}
|
||||
|
||||
json_t* NetworkBase::GetServerInfoAsJson() const
|
||||
json_t NetworkBase::GetServerInfoAsJson() const
|
||||
{
|
||||
json_t* obj = json_object();
|
||||
json_object_set_new(obj, "name", json_string(gConfigNetwork.server_name.c_str()));
|
||||
json_object_set_new(obj, "requiresPassword", json_boolean(_password.size() > 0));
|
||||
json_object_set_new(obj, "version", json_string(network_get_version().c_str()));
|
||||
json_object_set_new(obj, "players", json_integer(player_list.size()));
|
||||
json_object_set_new(obj, "maxPlayers", json_integer(gConfigNetwork.maxplayers));
|
||||
json_object_set_new(obj, "description", json_string(gConfigNetwork.server_description.c_str()));
|
||||
json_object_set_new(obj, "greeting", json_string(gConfigNetwork.server_greeting.c_str()));
|
||||
json_object_set_new(obj, "dedicated", json_boolean(gOpenRCT2Headless));
|
||||
return obj;
|
||||
json_t jsonObj = {
|
||||
{ "name", gConfigNetwork.server_name }, { "requiresPassword", _password.size() > 0 },
|
||||
{ "version", network_get_version() }, { "players", player_list.size() },
|
||||
{ "maxPlayers", gConfigNetwork.maxplayers }, { "description", gConfigNetwork.server_description },
|
||||
{ "greeting", gConfigNetwork.server_greeting }, { "dedicated", gOpenRCT2Headless },
|
||||
};
|
||||
return jsonObj;
|
||||
}
|
||||
|
||||
void NetworkBase::Server_Send_GAMEINFO(NetworkConnection& connection)
|
||||
{
|
||||
NetworkPacket packet(NetworkCommand::GameInfo);
|
||||
# ifndef DISABLE_HTTP
|
||||
json_t* obj = GetServerInfoAsJson();
|
||||
json_t jsonObj = GetServerInfoAsJson();
|
||||
|
||||
// Provider details
|
||||
json_t* jsonProvider = json_object();
|
||||
json_object_set_new(jsonProvider, "name", json_string(gConfigNetwork.provider_name.c_str()));
|
||||
json_object_set_new(jsonProvider, "email", json_string(gConfigNetwork.provider_email.c_str()));
|
||||
json_object_set_new(jsonProvider, "website", json_string(gConfigNetwork.provider_website.c_str()));
|
||||
json_object_set_new(obj, "provider", jsonProvider);
|
||||
json_t jsonProvider = {
|
||||
{ "name", gConfigNetwork.provider_name },
|
||||
{ "email", gConfigNetwork.provider_email },
|
||||
{ "website", gConfigNetwork.provider_website },
|
||||
};
|
||||
|
||||
packet.WriteString(json_dumps(obj, 0));
|
||||
jsonObj["provider"] = jsonProvider;
|
||||
|
||||
packet.WriteString(jsonObj.dump().c_str());
|
||||
packet << _serverState.gamestateSnapshotsEnabled;
|
||||
|
||||
json_decref(obj);
|
||||
# endif
|
||||
connection.QueuePacket(std::move(packet));
|
||||
}
|
||||
@@ -3178,32 +3173,27 @@ void NetworkBase::Client_Send_GAMEINFO()
|
||||
_serverConnection->QueuePacket(std::move(packet));
|
||||
}
|
||||
|
||||
static std::string json_stdstring_value(const json_t* string)
|
||||
{
|
||||
const char* cstr = json_string_value(string);
|
||||
return cstr == nullptr ? std::string() : std::string(cstr);
|
||||
}
|
||||
|
||||
void NetworkBase::Client_Handle_GAMEINFO([[maybe_unused]] NetworkConnection& connection, NetworkPacket& packet)
|
||||
{
|
||||
const char* jsonString = packet.ReadString();
|
||||
packet >> _serverState.gamestateSnapshotsEnabled;
|
||||
|
||||
json_error_t error;
|
||||
json_t* root = json_loads(jsonString, 0, &error);
|
||||
json_t jsonData = Json::FromString(jsonString);
|
||||
|
||||
ServerName = json_stdstring_value(json_object_get(root, "name"));
|
||||
ServerDescription = json_stdstring_value(json_object_get(root, "description"));
|
||||
ServerGreeting = json_stdstring_value(json_object_get(root, "greeting"));
|
||||
|
||||
json_t* jsonProvider = json_object_get(root, "provider");
|
||||
if (jsonProvider != nullptr)
|
||||
if (jsonData.is_object())
|
||||
{
|
||||
ServerProviderName = json_stdstring_value(json_object_get(jsonProvider, "name"));
|
||||
ServerProviderEmail = json_stdstring_value(json_object_get(jsonProvider, "email"));
|
||||
ServerProviderWebsite = json_stdstring_value(json_object_get(jsonProvider, "website"));
|
||||
ServerName = Json::GetString(jsonData["name"]);
|
||||
ServerDescription = Json::GetString(jsonData["description"]);
|
||||
ServerGreeting = Json::GetString(jsonData["greeting"]);
|
||||
|
||||
json_t jsonProvider = jsonData["provider"];
|
||||
if (jsonProvider.is_object())
|
||||
{
|
||||
ServerProviderName = Json::GetString(jsonProvider["name"]);
|
||||
ServerProviderEmail = Json::GetString(jsonProvider["email"]);
|
||||
ServerProviderWebsite = Json::GetString(jsonProvider["website"]);
|
||||
}
|
||||
}
|
||||
json_decref(root);
|
||||
|
||||
network_chat_show_server_greeting();
|
||||
}
|
||||
@@ -3977,7 +3967,7 @@ bool network_gamestate_snapshots_enabled()
|
||||
return network_get_server_state().gamestateSnapshotsEnabled;
|
||||
}
|
||||
|
||||
json_t* network_get_server_info_as_json()
|
||||
json_t network_get_server_info_as_json()
|
||||
{
|
||||
return gNetwork.GetServerInfoAsJson();
|
||||
}
|
||||
@@ -4242,8 +4232,8 @@ NetworkServerState_t network_get_server_state()
|
||||
{
|
||||
return NetworkServerState_t{};
|
||||
}
|
||||
json_t* network_get_server_info_as_json()
|
||||
json_t network_get_server_info_as_json()
|
||||
{
|
||||
return nullptr;
|
||||
return {};
|
||||
}
|
||||
#endif /* DISABLE_NETWORK */
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "../actions/GameAction.h"
|
||||
#include "../core/Json.hpp"
|
||||
#include "NetworkConnection.h"
|
||||
#include "NetworkGroup.h"
|
||||
#include "NetworkPlayer.h"
|
||||
@@ -42,7 +43,7 @@ public: // Common
|
||||
void AppendChatLog(const std::string& s);
|
||||
void CloseChatLog();
|
||||
NetworkStats_t GetStats() const;
|
||||
json_t* GetServerInfoAsJson() const;
|
||||
json_t GetServerInfoAsJson() const;
|
||||
bool ProcessConnection(NetworkConnection& connection);
|
||||
void CloseConnection();
|
||||
NetworkPlayer* AddPlayer(const std::string& name, const std::string& keyhash);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#define MAX_SERVER_DESCRIPTION_LENGTH 256
|
||||
|
||||
#include "../common.h"
|
||||
#include "../core/Json.hpp"
|
||||
#include "../localisation/StringIds.h"
|
||||
#include "NetworkTypes.h"
|
||||
|
||||
@@ -22,7 +23,6 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
struct json_t;
|
||||
struct GameAction;
|
||||
struct Peep;
|
||||
struct CoordsXYZ;
|
||||
@@ -117,4 +117,4 @@ std::string network_get_version();
|
||||
|
||||
NetworkStats_t network_get_stats();
|
||||
NetworkServerState_t network_get_server_state();
|
||||
json_t* network_get_server_info_as_json();
|
||||
json_t network_get_server_info_as_json();
|
||||
|
||||
Reference in New Issue
Block a user