Factor server start into separate function

Needed to allow campaignd to load config before starting server.
This commit is contained in:
loonycyborg 2016-06-17 21:50:05 +03:00
parent 358bf3f9f8
commit bd304cb307
5 changed files with 23 additions and 10 deletions

View File

@ -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)

View File

@ -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.

View File

@ -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

View File

@ -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();

View File

@ -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);