// Disconnect all players
public void ShutDown()
{
try {
log.Log("Server shutting down.", LogType.SystemActivity);
keepGoing = false;
if (mainThread != null && mainThread.IsAlive)
{
mainThread.Join();
}
if (heartbeat != null)
{
heartbeat.ShutDown();
}
if (tasks != null)
{
tasks.ShutDown();
}
lock ( playerListLock ) {
for (int i = 1; i < players.Length; i++)
{
if (players[i] != null)
{
players[i].session.Kick("Server shutting down.");
}
players[i] = null;
}
playerCount = 0;
}
if (config.GetBool("SaveOnShutdown") && map != null)
{
map.Save();
}
if (db != null)
{
db.Save();
}
if (bans != null)
{
bans.Save();
}
if (server != null)
{
server.ShutDown();
}
} catch (Exception ex) {
log.Log("Error occured while trying to shut down: {0}", LogType.FatalError, ex.Message);
}
}