diff --git a/Globals.cpp b/Globals.cpp index 498a53cc..b03d967e 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -768,6 +768,16 @@ global_settings::ConfigParse(cParser &Parser) { Parser.getTokens(1); Parser >> python_mipmaps; } + else if (token == "network.enabled") + { + Parser.getTokens(1); + Parser >> network_conf.enabled; + } + else if (token == "network.server") + { + Parser.getTokens(1); + Parser >> network_conf.is_server; + } } while ((token != "") && (token != "endconfig")); //(!Parser->EndOfFile) // na koniec trochę zależności if (!bLoadTraction) // wczytywanie drutów i słupów diff --git a/Globals.h b/Globals.h index 4d8c1a9e..fdbde946 100644 --- a/Globals.h +++ b/Globals.h @@ -194,6 +194,11 @@ struct global_settings { bool gfx_shadergamma = false; bool gfx_usegles = false; + struct network_conf_t { + bool enabled = false; + bool is_server; + } network_conf; + // methods void LoadIniFile( std::string asFileName ); void ConfigParse( cParser &parser ); diff --git a/application.cpp b/application.cpp index 1d668550..53a9992e 100644 --- a/application.cpp +++ b/application.cpp @@ -177,7 +177,8 @@ eu07_application::run() { Timer::subsystem.mainloop_total.stop(); - m_network->poll(); + if (Global.network_conf.enabled) + m_network->poll(); } return 0; @@ -592,6 +593,14 @@ eu07_application::init_modes() { } bool eu07_application::init_network() { + if (!Global.network_conf.enabled) + return true; + m_network.emplace(); + if (Global.network_conf.is_server) + m_network->create_server(); + else + m_network->connect(); + return true; } diff --git a/network/manager.cpp b/network/manager.cpp index 7fa69034..f52a86c2 100644 --- a/network/manager.cpp +++ b/network/manager.cpp @@ -3,7 +3,6 @@ network::manager::manager() { - create_server(); } void network::manager::create_server() @@ -18,5 +17,5 @@ void network::manager::poll() void network::manager::connect() { - + client = std::make_shared(io_context); } diff --git a/network/manager.h b/network/manager.h index e5fcd5ef..f44c5be4 100644 --- a/network/manager.h +++ b/network/manager.h @@ -9,7 +9,7 @@ namespace network { asio::io_context io_context; std::vector> servers; - //std::shared_ptr client; + std::shared_ptr client; public: manager(); diff --git a/network/network.h b/network/network.h index 51bcef3a..20d40e71 100644 --- a/network/network.h +++ b/network/network.h @@ -31,7 +31,5 @@ namespace network class client { - protected: - std::shared_ptr srv; }; } diff --git a/network/tcp.cpp b/network/tcp.cpp index 733fcc4e..5b598099 100644 --- a/network/tcp.cpp +++ b/network/tcp.cpp @@ -112,3 +112,25 @@ void network::tcp_server::handle_accept(std::shared_ptr conn, const as accept_conn(); } + +network::tcp_client::tcp_client(asio::io_context &io_ctx) +{ + conn = std::make_shared(io_ctx); + + asio::ip::tcp::endpoint endpoint( + asio::ip::address::from_string("127.0.0.1"), 7424); + conn->socket().async_connect(endpoint, + std::bind(&tcp_client::handle_accept, this, std::placeholders::_1)); +} + +void network::tcp_client::handle_accept(const asio::error_code &err) +{ + if (!err) + { + conn->connected(); + } + else + { + WriteLog(std::string("net: failed to connect: " + err.message()), logtype::net); + } +} diff --git a/network/tcp.h b/network/tcp.h index ce959977..afdd49be 100644 --- a/network/tcp.h +++ b/network/tcp.h @@ -43,4 +43,14 @@ namespace network asio::ip::tcp::acceptor m_acceptor; }; + + class tcp_client : public client + { + private: + std::shared_ptr conn; + void handle_accept(const asio::error_code &err); + + public: + tcp_client(asio::io_context &io_ctx); + }; }