wesnothd: restore lan server auto-shutdown functionality
This commit is contained in:
parent
0714d488bc
commit
4eea1b5f0d
2 changed files with 31 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue