wesnothd: restore lan server auto-shutdown functionality

This commit is contained in:
loonycyborg 2018-06-04 16:38:42 +03:00
parent 54bdfcad87
commit 6a88624f44
2 changed files with 31 additions and 0 deletions

View file

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

View file

@ -228,6 +228,11 @@ private:
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);