// 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); } }
static void ImportBans(Player player, CommandReader cmd) { string serverName = cmd.Next(); string fileName = cmd.Next(); // Make sure all parameters are specified if (serverName == null || fileName == null) { CdImport.PrintUsage(player); return; } // Check if file exists if (!File.Exists(fileName)) { player.Message("File not found: {0}", fileName); return; } string[] names; switch (serverName.ToLower()) { case "mcsharp": case "mczall": case "mclawl": try { names = File.ReadAllLines(fileName); } catch (Exception ex) { Logger.Log(LogType.Error, "Could not open \"{0}\" to import bans: {1}", fileName, ex); return; } break; default: player.Message("fCraft does not support importing from {0}", serverName); return; } if (!cmd.IsConfirmed) { player.Confirm(cmd, "Import {0} bans from \"{1}\"?", names.Length, Path.GetFileName(fileName)); return; } string reason = "(import from " + serverName + ")"; foreach (string name in names) { if (Player.IsValidName(name)) { PlayerInfo info = PlayerDB.FindExact(name) ?? PlayerDB.AddUnrecognizedPlayer(name, RankChangeType.Default); info.Ban(player, reason, true, true); } else { IPAddress ip; if (IPAddressUtil.IsIP(name) && IPAddress.TryParse(name, out ip)) { ip.BanIP(player, reason, true, true); } else { player.Message("Could not parse \"{0}\" as either name or IP. Skipping.", name); } } } PlayerDB.Save(); IPBanList.Save(); }