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": {
|
"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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user