Skip to content

Commit

Permalink
wesnothd: restore lan server auto-shutdown functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
loonycyborg committed Jun 4, 2018
1 parent 0714d48 commit 4eea1b5
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/server/server.cpp
Expand Up @@ -263,6 +263,7 @@ server::server(int port,
, last_uh_clean_(last_ping_)
, cmd_handlers_()
, timer_(io_service_)
, lan_server_timer_(io_service_)
{
setup_handlers();
load_config();
Expand Down Expand Up @@ -300,6 +301,25 @@ void server::handle_graceful_timeout(const boost::system::error_code& error)
}
}

void server::start_lan_server_timer()
{
lan_server_timer_.expires_from_now(std::chrono::seconds(lan_server_));
lan_server_timer_.async_wait([this](const boost::system::error_code& ec) { handle_lan_server_shutdown(ec); });
}

void server::abort_lan_server_timer()
{
lan_server_timer_.cancel();
}

void server::handle_lan_server_shutdown(const boost::system::error_code& error)
{
if(error)
return;

throw server_shutdown("lan server shutdown");
}

void server::setup_fifo()
{
#ifndef _WIN32
Expand Down Expand Up @@ -955,6 +975,9 @@ void server::send_password_request(socket_ptr socket,

void server::add_player(socket_ptr socket, const wesnothd::player& player)
{
if(lan_server_)
abort_lan_server_timer();

bool inserted;
std::tie(std::ignore, inserted) = player_connections_.insert(player_connections::value_type(socket, player));
assert(inserted);
Expand Down Expand Up @@ -1908,6 +1931,9 @@ void server::remove_player(socket_ptr socket)
if(socket->is_open()) {
socket->close();
}

if(lan_server_ && player_connections_.size() == 0)
start_lan_server_timer();
}

void server::send_to_lobby(simple_wml::document& data, socket_ptr exclude) const
Expand Down
5 changes: 5 additions & 0 deletions src/server/server.hpp
Expand Up @@ -228,6 +228,11 @@ class server : public server_base

boost::asio::deadline_timer timer_;
void handle_graceful_timeout(const boost::system::error_code& error);

boost::asio::steady_timer lan_server_timer_;
void start_lan_server_timer();
void abort_lan_server_timer();
void handle_lan_server_shutdown(const boost::system::error_code& error);
};

void send_to_player(socket_ptr socket, simple_wml::document& doc);
Expand Down

0 comments on commit 4eea1b5

Please sign in to comment.