Skip to content

Commit

Permalink
Factor server start into separate function
Browse files Browse the repository at this point in the history
Needed to allow campaignd to load config before starting server.
  • Loading branch information
loonycyborg committed Jun 17, 2016
1 parent 358bf3f commit bd304cb
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 10 deletions.
10 changes: 7 additions & 3 deletions src/campaign_server/campaign_server.cpp
Expand Up @@ -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)
Expand All @@ -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
Expand All @@ -129,14 +131,16 @@ server::server(const std::string& cfg_file)
}

register_handlers();

start_server();
}

server::~server()
{
write_config();
}

int server::load_config()
void server::load_config()
{
LOG_CS << "Reading configuration from " << cfg_file_ << "...\n";

Expand Down Expand Up @@ -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)
Expand Down
4 changes: 1 addition & 3 deletions src/campaign_server/campaign_server.hpp
Expand Up @@ -99,10 +99,8 @@ class server : private boost::noncopyable, public server_base

/**
* 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.
Expand Down
2 changes: 2 additions & 0 deletions src/server/server.cpp
Expand Up @@ -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
Expand Down
12 changes: 9 additions & 3 deletions src/server/server_base.cpp
Expand Up @@ -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
Expand All @@ -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();
Expand Down
5 changes: 4 additions & 1 deletion src/server/server_base.hpp
Expand Up @@ -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);

Expand Down

0 comments on commit bd304cb

Please sign in to comment.