From bd304cb307b32fe198c39f7e7370d6c695fd5142 Mon Sep 17 00:00:00 2001 From: loonycyborg Date: Fri, 17 Jun 2016 21:50:05 +0300 Subject: [PATCH] Factor server start into separate function Needed to allow campaignd to load config before starting server. --- src/campaign_server/campaign_server.cpp | 10 +++++++--- src/campaign_server/campaign_server.hpp | 4 +--- src/server/server.cpp | 2 ++ src/server/server_base.cpp | 12 +++++++++--- src/server/server_base.hpp | 5 ++++- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/campaign_server/campaign_server.cpp b/src/campaign_server/campaign_server.cpp index 5bed3e9e229..4f0a5ccbbed 100644 --- a/src/campaign_server/campaign_server.cpp +++ b/src/campaign_server/campaign_server.cpp @@ -100,7 +100,7 @@ void set_passphrase(config& campaign, std::string passphrase) namespace campaignd { server::server(const std::string& cfg_file) - : server_base(load_config(), true) + : server_base(default_campaignd_port, true) , cfg_() , cfg_file_(cfg_file) , read_only_(false) @@ -111,6 +111,8 @@ server::server(const std::string& cfg_file) , blacklist_() , blacklist_file_() { + load_config(); + LOG_CS << "Port: " << port_ << " "; // Ensure all campaigns to use secure hash passphrase storage @@ -129,6 +131,8 @@ server::server(const std::string& cfg_file) } register_handlers(); + + start_server(); } server::~server() @@ -136,7 +140,7 @@ server::~server() write_config(); } -int server::load_config() +void server::load_config() { LOG_CS << "Reading configuration from " << cfg_file_ << "...\n"; @@ -191,7 +195,7 @@ int server::load_config() cfg_["compress_level"] = compress_level_; // But not the listening port number. - return cfg_["port"].to_int(default_campaignd_port); + port_ = cfg_["port"].to_int(default_campaignd_port); } void server::handle_new_client(socket_ptr socket) diff --git a/src/campaign_server/campaign_server.hpp b/src/campaign_server/campaign_server.hpp index 431d43fba0e..4f577938f32 100644 --- a/src/campaign_server/campaign_server.hpp +++ b/src/campaign_server/campaign_server.hpp @@ -99,10 +99,8 @@ private: /** * Reads the server configuration from WML. - * - * @return The configured listening port number. */ - int load_config(); + void load_config(); /** * Writes the server configuration WML back to disk. diff --git a/src/server/server.cpp b/src/server/server.cpp index 41e73e2aa05..ba07762d5d8 100644 --- a/src/server/server.cpp +++ b/src/server/server.cpp @@ -259,6 +259,8 @@ server::server(int port, bool keep_alive, const std::string& config_file, size_t setup_handlers(); load_config(); ban_manager_.read(); + + start_server(); } #ifndef _WIN32 diff --git a/src/server/server_base.cpp b/src/server/server_base.cpp index e191ed79602..d19133132be 100644 --- a/src/server/server_base.cpp +++ b/src/server/server_base.cpp @@ -32,7 +32,9 @@ static lg::log_domain log_config("config"); #include "send_receive_wml_helpers.ipp" -server_base::server_base(int port, bool keep_alive) : +server_base::server_base(unsigned short port, bool keep_alive) : + port_(port), + keep_alive_(keep_alive), io_service_(), acceptor_(io_service_), #ifndef _WIN32 @@ -41,10 +43,14 @@ server_base::server_base(int port, bool keep_alive) : #endif sigs_(io_service_, SIGINT, SIGTERM) { - boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port); +} + +void server_base::start_server() +{ + boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port_); acceptor_.open(endpoint.protocol()); acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); - acceptor_.set_option(boost::asio::ip::tcp::acceptor::keep_alive(keep_alive)); + acceptor_.set_option(boost::asio::ip::tcp::acceptor::keep_alive(keep_alive_)); acceptor_.bind(endpoint); acceptor_.listen(); serve(); diff --git a/src/server/server_base.hpp b/src/server/server_base.hpp index 8365ef23654..b701df4e3ae 100644 --- a/src/server/server_base.hpp +++ b/src/server/server_base.hpp @@ -36,13 +36,16 @@ struct server_shutdown : public game::error class server_base { public: - server_base(int port, bool keep_alive); + server_base(unsigned short port, bool keep_alive); virtual ~server_base() {} void run(); protected: + unsigned short port_; + bool keep_alive_; boost::asio::io_service io_service_; boost::asio::ip::tcp::acceptor acceptor_; + void start_server(); void serve(); void accept_connection(const boost::system::error_code& error, socket_ptr socket);