mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 06:14:08 +08:00
feat: read network config from JSON
This commit is contained in:
@@ -16,5 +16,10 @@
|
||||
"ui": {
|
||||
"font": "fonts/SourceHanSansSC-Regular.otf",
|
||||
"font_size": 16
|
||||
},
|
||||
"network": {
|
||||
"server_ip": "127.0.0.1",
|
||||
"port": 12345,
|
||||
"max_players": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
#include "NetworkManager.h"
|
||||
#include "utils/ConfigLoader.h"
|
||||
#include <iostream>
|
||||
NetworkManager::NetworkManager()
|
||||
: m_workguard(asio::make_work_guard(m_ioContext))
|
||||
{
|
||||
std::cout << "NetworkManager constructor called\n";
|
||||
|
||||
m_config = ConfigLoader::load("assets/config.json");
|
||||
}
|
||||
|
||||
NetworkManager::~NetworkManager() {
|
||||
@@ -63,7 +64,7 @@ void NetworkManager::startServer() {
|
||||
if (!m_gameServer) {
|
||||
std::cerr << "gameServer is not esist\n";
|
||||
}
|
||||
m_gameServer->startServer(52025);
|
||||
m_gameServer->startServer(m_config.network.port);
|
||||
|
||||
std::cout << "start server success\n";
|
||||
//m_ioContext.run();
|
||||
@@ -92,10 +93,10 @@ void NetworkManager::startClient() {
|
||||
}
|
||||
);
|
||||
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) {
|
||||
m_client->connect("127.0.0.1", 52025, false);
|
||||
m_client->connect(m_config.network.serverIP, m_config.network.port, false);
|
||||
//m_ioContext.run();
|
||||
}
|
||||
std::cout << "start client success\n";
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "network/client/Client.h"
|
||||
#include "network/server/GameServer.h"
|
||||
|
||||
#include "utils/Config.h"
|
||||
class NetworkManager {
|
||||
public:
|
||||
using ClickEventCallback = std::function<void(int logicalX, int logicalY)>;
|
||||
@@ -40,7 +40,7 @@ private:
|
||||
|
||||
ClickEventCallback m_clickEventCallback;
|
||||
StartGameCallback m_startGameCallback;
|
||||
|
||||
Config m_config;
|
||||
bool m_isMyTurn = false; // 新增:当前是否是我的回合
|
||||
void startServer();
|
||||
|
||||
|
||||
@@ -80,7 +80,14 @@ struct Viewport {
|
||||
SDL_FRect dst{};
|
||||
};
|
||||
|
||||
struct NetworkConfig {
|
||||
int port = 12345;
|
||||
int maxPlayers = 2;
|
||||
std::string serverIP = "127.0.0.1";
|
||||
};
|
||||
|
||||
struct Config {
|
||||
WindowConfig window;
|
||||
RenderConfig render;
|
||||
NetworkConfig network;
|
||||
};
|
||||
@@ -29,6 +29,20 @@ static void loadRender(const json& j, RenderConfig& render) {
|
||||
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) {
|
||||
std::ifstream file(path);
|
||||
|
||||
@@ -53,7 +67,18 @@ bool ConfigLoader::load(const std::string& path, Config& config) {
|
||||
if (j.contains("render")) {
|
||||
loadRender(j["render"], config.render);
|
||||
}
|
||||
if (j.contains("network")) {
|
||||
loadNetwork(j["network"], config.network);
|
||||
}
|
||||
std::cout << "load json success!\n";
|
||||
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;
|
||||
}
|
||||
@@ -6,6 +6,6 @@
|
||||
class ConfigLoader {
|
||||
public:
|
||||
static bool load(const std::string& path, Config& config);
|
||||
|
||||
static Config load(const std::string&path);
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user