Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Kick players when shutting down server and there is a crash due to a …
- Loading branch information
Showing
with
17 additions
and
2 deletions.
-
+10
−0
src/environment.cpp
-
+1
−0
src/environment.h
-
+6
−2
src/server.cpp
|
@@ -39,6 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc., |
|
|
#include "mapblock_mesh.h" |
|
|
#include "event.h" |
|
|
#endif |
|
|
#include "server.h" |
|
|
#include "daynightratio.h" |
|
|
#include "map.h" |
|
|
#include "emerge.h" |
|
@@ -425,6 +426,15 @@ bool ServerEnvironment::line_of_sight(v3f pos1, v3f pos2, float stepsize, v3s16 |
|
|
return true; |
|
|
} |
|
|
|
|
|
void ServerEnvironment::kickAllPlayers(const std::string &reason) |
|
|
{ |
|
|
for (std::vector<Player*>::iterator it = m_players.begin(); |
|
|
it != m_players.end(); |
|
|
++it) { |
|
|
((Server*)m_gamedef)->DenyAccess_Legacy((*it)->peer_id, utf8_to_wide(reason)); |
|
|
} |
|
|
} |
|
|
|
|
|
void ServerEnvironment::saveLoadedPlayers() |
|
|
{ |
|
|
std::string players_path = m_path_world + DIR_DELIM "players"; |
|
|
|
@@ -221,6 +221,7 @@ class ServerEnvironment : public Environment |
|
|
float getSendRecommendedInterval() |
|
|
{ return m_recommended_send_interval; } |
|
|
|
|
|
void kickAllPlayers(const std::string &reason); |
|
|
// Save players |
|
|
void saveLoadedPlayers(); |
|
|
void savePlayer(const std::string &playername); |
|
|
|
@@ -394,10 +394,13 @@ Server::~Server() |
|
|
// Execute script shutdown hooks |
|
|
m_script->on_shutdown(); |
|
|
|
|
|
infostream<<"Server: Saving players"<<std::endl; |
|
|
infostream << "Server: Saving players" << std::endl; |
|
|
m_env->saveLoadedPlayers(); |
|
|
|
|
|
infostream<<"Server: Saving environment metadata"<<std::endl; |
|
|
infostream << "Server: kick players" << std::endl; |
|
|
m_env->kickAllPlayers("Server shutting down..."); |
|
|
|
|
|
infostream << "Server: Saving environment metadata" << std::endl; |
|
|
m_env->saveMeta(); |
|
|
} |
|
|
|
|
@@ -499,6 +502,7 @@ void Server::step(float dtime) |
|
|
throw ServerError(async_err); |
|
|
} |
|
|
else { |
|
|
m_env->kickAllPlayers("The server has crashed. Disconnecting all players. Please reconnect soon..."); |
|
|
errorstream << "UNRECOVERABLE error occurred. Stopping server. " |
|
|
<< "Please fix the following error:" << std::endl |
|
|
<< async_err << std::endl; |
|
|