feat: read network config from JSON

This commit is contained in:
2025-12-28 16:44:54 +08:00
parent 2d43b73e57
commit 19698996cd
6 changed files with 46 additions and 8 deletions

View File

@@ -16,5 +16,10 @@
"ui": { "ui": {
"font": "fonts/SourceHanSansSC-Regular.otf", "font": "fonts/SourceHanSansSC-Regular.otf",
"font_size": 16 "font_size": 16
},
"network": {
"server_ip": "127.0.0.1",
"port": 12345,
"max_players": 2
} }
} }

View File

@@ -1,10 +1,11 @@
#include "NetworkManager.h" #include "NetworkManager.h"
#include "utils/ConfigLoader.h"
#include <iostream> #include <iostream>
NetworkManager::NetworkManager() NetworkManager::NetworkManager()
: m_workguard(asio::make_work_guard(m_ioContext)) : m_workguard(asio::make_work_guard(m_ioContext))
{ {
std::cout << "NetworkManager constructor called\n"; std::cout << "NetworkManager constructor called\n";
m_config = ConfigLoader::load("assets/config.json");
} }
NetworkManager::~NetworkManager() { NetworkManager::~NetworkManager() {
@@ -63,7 +64,7 @@ void NetworkManager::startServer() {
if (!m_gameServer) { if (!m_gameServer) {
std::cerr << "gameServer is not esist\n"; std::cerr << "gameServer is not esist\n";
} }
m_gameServer->startServer(52025); m_gameServer->startServer(m_config.network.port);
std::cout << "start server success\n"; std::cout << "start server success\n";
//m_ioContext.run(); //m_ioContext.run();
@@ -92,10 +93,10 @@ void NetworkManager::startClient() {
} }
); );
if (m_netType == NetType::HOST) { if (m_netType == NetType::HOST) {
m_client->connect("127.0.0.1", 52025, true); m_client->connect("127.0.0.1", m_config.network.port, true);
} }
if (m_netType == NetType::CLIENT) { if (m_netType == NetType::CLIENT) {
m_client->connect("127.0.0.1", 52025, false); m_client->connect(m_config.network.serverIP, m_config.network.port, false);
//m_ioContext.run(); //m_ioContext.run();
} }
std::cout << "start client success\n"; std::cout << "start client success\n";

View File

@@ -2,7 +2,7 @@
#include "network/client/Client.h" #include "network/client/Client.h"
#include "network/server/GameServer.h" #include "network/server/GameServer.h"
#include "utils/Config.h"
class NetworkManager { class NetworkManager {
public: public:
using ClickEventCallback = std::function<void(int logicalX, int logicalY)>; using ClickEventCallback = std::function<void(int logicalX, int logicalY)>;
@@ -40,7 +40,7 @@ private:
ClickEventCallback m_clickEventCallback; ClickEventCallback m_clickEventCallback;
StartGameCallback m_startGameCallback; StartGameCallback m_startGameCallback;
Config m_config;
bool m_isMyTurn = false; // 新增:当前是否是我的回合 bool m_isMyTurn = false; // 新增:当前是否是我的回合
void startServer(); void startServer();

View File

@@ -80,7 +80,14 @@ struct Viewport {
SDL_FRect dst{}; SDL_FRect dst{};
}; };
struct NetworkConfig {
int port = 12345;
int maxPlayers = 2;
std::string serverIP = "127.0.0.1";
};
struct Config { struct Config {
WindowConfig window; WindowConfig window;
RenderConfig render; RenderConfig render;
NetworkConfig network;
}; };

View File

@@ -29,6 +29,20 @@ static void loadRender(const json& j, RenderConfig& render) {
get("logical_height", render.logicalHeight); get("logical_height", render.logicalHeight);
} }
static void loadNetwork(const json& j, NetworkConfig& network) {
auto get = [&](const char* key, auto& out) {
if (j.contains(key))
j.at(key).get_to(out);
else {
std::cout << "Unkonw key " << key << "\n";
}
};
get("port", network.port);
get("max_players", network.maxPlayers);
get("server_ip", network.serverIP);
}
bool ConfigLoader::load(const std::string& path, Config& config) { bool ConfigLoader::load(const std::string& path, Config& config) {
std::ifstream file(path); std::ifstream file(path);
@@ -53,7 +67,18 @@ bool ConfigLoader::load(const std::string& path, Config& config) {
if (j.contains("render")) { if (j.contains("render")) {
loadRender(j["render"], config.render); loadRender(j["render"], config.render);
} }
if (j.contains("network")) {
loadNetwork(j["network"], config.network);
}
std::cout << "load json success!\n"; std::cout << "load json success!\n";
return true; return true;
}
Config ConfigLoader::load(const std::string& path) {
Config config;
if (!load(path, config)) {
std::cerr << "[ConfigLoader] Failed to load config from " << path << "\n";
}
return config;
} }

View File

@@ -6,6 +6,6 @@
class ConfigLoader { class ConfigLoader {
public: public:
static bool load(const std::string& path, Config& config); static bool load(const std::string& path, Config& config);
static Config load(const std::string&path);
}; };