From ac7908de918215abe7780786adcb9fe08187b0ce Mon Sep 17 00:00:00 2001 From: RaidMax Date: Sat, 27 May 2017 18:29:20 -0500 Subject: [PATCH] Redid the logging system --- Admin/IW4M ADMIN.csproj | 1 + Admin/Kayak.cs | 4 +- Admin/Logger.cs | 70 ++++++++++++++++++++++ Admin/Main.cs | 3 + Admin/Manager.cs | 23 +++++--- Admin/Plugins.cs | 19 +++--- Admin/Server.cs | 72 +++++++++++------------ Admin/WebService.cs | 5 +- Admin/lib/SharedLibrary.dll | Bin 94720 -> 101888 bytes Auto Restart Plugin/Monitoring.cs | 2 +- MessageboardPlugin/Forum.cs | 1 - SharedLibrary/Commands/NativeCommands.cs | 4 +- SharedLibrary/Database.cs | 16 +---- SharedLibrary/File.cs | 30 ---------- SharedLibrary/Interfaces/ILogger.cs | 17 ++++++ SharedLibrary/Interfaces/IManager.cs | 1 + SharedLibrary/Log.cs | 61 ------------------- SharedLibrary/Server.cs | 15 ++--- SharedLibrary/SharedLibrary.csproj | 2 +- SharedLibrary/Utilities.cs | 3 +- Stats Plugin/Plugin.cs | 4 +- Welcome Plugin/CountryLookup.cs | 41 ++++--------- Welcome Plugin/Plugin.cs | 13 +++- 23 files changed, 191 insertions(+), 216 deletions(-) create mode 100644 Admin/Logger.cs create mode 100644 SharedLibrary/Interfaces/ILogger.cs delete mode 100644 SharedLibrary/Log.cs diff --git a/Admin/IW4M ADMIN.csproj b/Admin/IW4M ADMIN.csproj index 9aff25ebf..23c2a8956 100644 --- a/Admin/IW4M ADMIN.csproj +++ b/Admin/IW4M ADMIN.csproj @@ -113,6 +113,7 @@ + diff --git a/Admin/Kayak.cs b/Admin/Kayak.cs index 206d801da..3d143ede4 100644 --- a/Admin/Kayak.cs +++ b/Admin/Kayak.cs @@ -13,12 +13,12 @@ namespace IW4MAdmin { public void OnException(IScheduler scheduler, Exception e) { - Manager.GetInstance().Logger.Write("Web service has encountered an error - " + e.Message); + Manager.GetInstance().Logger.WriteError("Web service has encountered an error - " + e.Message); } public void OnStop(IScheduler scheduler) { - Manager.GetInstance().Logger.Write("Web service has been stopped..."); + Manager.GetInstance().Logger.WriteDebug("Web service has been stopped..."); } } diff --git a/Admin/Logger.cs b/Admin/Logger.cs new file mode 100644 index 000000000..8168c21ae --- /dev/null +++ b/Admin/Logger.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; + +namespace IW4MAdmin +{ + class Logger : SharedLibrary.Interfaces.ILogger + { + enum LogType + { + Verbose, + Info, + Debug, + Warning, + Error + } + + string FileName; + + public Logger(string fn) + { + FileName = fn; + } + + void Write(string msg, LogType type) + { + string LogLine = $"[{DateTime.Now.ToString("HH:mm:ss")}] - {type}: {msg}"; +#if DEBUG + // lets keep it simple and dispose of everything quickly as logging wont be that much (relatively) + + Console.WriteLine(LogLine); + File.AppendAllText(FileName, LogLine); +#else + if (type == LogType.Error || type == LogType.Verbose) + Console.WriteLine(LogLine); + if (type != LogType.Debug) + File.AppendAllText(FileName, LogLine); +#endif + + } + + public void WriteVerbose(string msg) + { + Write(msg, LogType.Verbose); + } + + public void WriteDebug(string msg) + { + Write(msg, LogType.Debug); + } + + public void WriteError(string msg) + { + Write(msg, LogType.Error); + } + + public void WriteInfo(string msg) + { + Write(msg, LogType.Info); + } + + public void WriteWarning(string msg) + { + Write(msg, LogType.Warning); + } + } +} diff --git a/Admin/Main.cs b/Admin/Main.cs index 698c228c4..8672054a9 100644 --- a/Admin/Main.cs +++ b/Admin/Main.cs @@ -117,6 +117,9 @@ namespace IW4MAdmin if (!Directory.Exists("Database")) Directory.CreateDirectory("Database"); + + if (!Directory.Exists("Plugins")) + Directory.CreateDirectory("Plugins"); } } } diff --git a/Admin/Manager.cs b/Admin/Manager.cs index 556a96582..9166ce114 100644 --- a/Admin/Manager.cs +++ b/Admin/Manager.cs @@ -22,6 +22,7 @@ namespace IW4MAdmin List Commands; Kayak.IScheduler webServiceTask; Thread WebThread; + public SharedLibrary.Interfaces.ILogger Logger { get; private set; } public bool Running { get; private set; } #if FTP_LOG const double UPDATE_FREQUENCY = 15000; @@ -29,12 +30,11 @@ namespace IW4MAdmin const double UPDATE_FREQUENCY = 300; #endif - public Log Logger; - private Manager() { - IFile logFile = new IFile("Logs/IW4MAdminManager.log", true); - Logger = new Log(logFile, Log.Level.Production, 0); + //IFile logFile = new IFile("Logs/IW4MAdminManager.log", true); + Logger = new Logger("Logs/IW4MAdmin.log"); + //Logger = new Log(logFile, Log.Level.Production, 0); Servers = new List(); Commands = new List(); @@ -54,7 +54,7 @@ namespace IW4MAdmin public static Manager GetInstance() { - return Instance == null ? Instance = new Manager() : Instance; + return Instance ?? (Instance = new Manager()); } public void Init() @@ -78,16 +78,16 @@ namespace IW4MAdmin { await ServerInstance.Initialize(); Servers.Add(ServerInstance); - Logger.Write($"Now monitoring {ServerInstance.Hostname}", Log.Level.Production); + Logger.WriteVerbose($"Now monitoring {ServerInstance.Hostname}"); } catch (SharedLibrary.Exceptions.ServerException e) { - Logger.Write($"Not monitoring server {Conf.IP}:{Conf.Port} due to uncorrectable errors", Log.Level.Production); + Logger.WriteWarning($"Not monitoring server {Conf.IP}:{Conf.Port} due to uncorrectable errors"); if (e.GetType() == typeof(SharedLibrary.Exceptions.DvarException)) - Logger.Write($"Could not get the dvar value for {(e as SharedLibrary.Exceptions.DvarException).Data["dvar_name"]} (ensure the server has a map loaded)", Log.Level.Production); + Logger.WriteError($"Could not get the dvar value for {(e as SharedLibrary.Exceptions.DvarException).Data["dvar_name"]} (ensure the server has a map loaded)"); else if (e.GetType() == typeof(SharedLibrary.Exceptions.NetworkException)) - Logger.Write("Could not communicate with the server (ensure the configuration is correct)", Log.Level.Production); + Logger.WriteError("Could not communicate with the server (ensure the configuration is correct)"); } }); @@ -151,5 +151,10 @@ namespace IW4MAdmin { return ClientPenalties; } + + public SharedLibrary.Interfaces.ILogger GetLogger() + { + return Logger; + } } } diff --git a/Admin/Plugins.cs b/Admin/Plugins.cs index 202a4abff..25d3c56a3 100644 --- a/Admin/Plugins.cs +++ b/Admin/Plugins.cs @@ -24,13 +24,13 @@ namespace IW4MAdmin else { - Manager.GetInstance().Logger.Write("Plugin folder does not exist!", Log.Level.All); + Manager.GetInstance().Logger.WriteWarning("Plugin folder does not exist!"); return false; } if (dllFileNames == null || dllFileNames.Length == 0) { - Manager.GetInstance().Logger.Write("No plugins to load", Log.Level.All); + Manager.GetInstance().Logger.WriteDebug("No plugins to load"); return true; } @@ -42,7 +42,8 @@ namespace IW4MAdmin assemblies.Add(assembly); } - int totalLoaded = 0; + int LoadedPlugins = 0; + int LoadedCommands = 0; foreach (Assembly Plugin in assemblies) { if (Plugin != null) @@ -55,8 +56,8 @@ namespace IW4MAdmin Object commandObject = Activator.CreateInstance(assemblyType); Command newCommand = (Command)commandObject; potentialCommands.Add(newCommand); - Manager.GetInstance().Logger.Write("Registered command \"" + newCommand.Name + "\"", Log.Level.Debug); - totalLoaded++; + Manager.GetInstance().Logger.WriteDebug("Registered command \"" + newCommand.Name + "\""); + LoadedCommands++; continue; } @@ -71,20 +72,20 @@ namespace IW4MAdmin { potentialPlugins.Add(newNotify); newNotify.OnLoadAsync(); - Manager.GetInstance().Logger.Write("Loaded plugin \"" + newNotify.Name + "\"" + " [" + newNotify.Version + "]", Log.Level.Debug); - totalLoaded++; + Manager.GetInstance().Logger.WriteDebug($"Loaded plugin \"{ newNotify.Name }\" [{newNotify.Version}]"); + LoadedPlugins++; } } catch (Exception E) { - Manager.GetInstance().Logger.Write("Could not load plugin " + Plugin.Location + " - " + E.Message); + Manager.GetInstance().Logger.WriteWarning($"Could not load plugin {Plugin.Location} - {E.Message}"); } } } } - Manager.GetInstance().Logger.Write("Loaded " + totalLoaded + " plugins.", Log.Level.Production); + Manager.GetInstance().Logger.WriteInfo($"Loaded {LoadedPlugins} plugins and registered {LoadedCommands} commands."); return true; } diff --git a/Admin/Server.cs b/Admin/Server.cs index 6e8238712..879ae5a64 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -61,7 +61,7 @@ namespace IW4MAdmin if (Players[P.clientID] != null && Players[P.clientID].npID == P.npID) // if someone has left and a new person has taken their spot between polls return true; - Log.Write("Client slot #" + P.clientID + " now reserved", Log.Level.Debug); + Logger.WriteDebug($"Client slot #{P.clientID} now reserved"); #if DEBUG == false @@ -72,7 +72,7 @@ namespace IW4MAdmin if (NewPlayer == null) // first time connecting { - Log.Write("Client slot #" + P.clientID + " first time connecting", Log.Level.All); + Logger.WriteDebug($"Client slot #{P.clientID} first time connecting"); Manager.GetClientDatabase().addPlayer(P); NewPlayer = Manager.GetClientDatabase().getPlayer(P.npID, P.clientID); aliasDB.addPlayer(new Aliases(NewPlayer.databaseID, NewPlayer.Name, NewPlayer.IP)); @@ -124,7 +124,7 @@ namespace IW4MAdmin { String Message; - Log.Write("Banned client " + P.Name + " trying to connect...", Log.Level.Debug); + Logger.WriteInfo($"Banned client {P.Name}::{P.npID} trying to connect..."); if (NewPlayer.lastOffense != null) Message = "Previously banned for ^5" + NewPlayer.lastOffense; @@ -158,7 +158,7 @@ namespace IW4MAdmin if (B != null && B.BType == Penalty.Type.Ban) { - Log.Write(String.Format("Banned client {0} is connecting with new alias {1}", aP.Name, NewPlayer.Name), Log.Level.Debug); + Logger.WriteDebug($"Banned client {aP.Name}::{aP.npID} is connecting with new alias {NewPlayer.Name}"); NewPlayer.lastOffense = String.Format("Evading ( {0} )", aP.Name); if (B.Reason != null) @@ -183,11 +183,9 @@ namespace IW4MAdmin #if DEBUG == FALSE await NewPlayer.Tell($"Welcome ^5{NewPlayer.Name} ^7this is your ^5{NewPlayer.TimesConnected()} ^7time connecting!"); #endif - if (NewPlayer.Name == "nosTEAM") - await NewPlayer.Tell("We encourage you to change your ^5name ^7using ^5/name^7"); - - Log.Write("Client " + NewPlayer.Name + " connecting...", Log.Level.Debug); // they're clean + Logger.WriteInfo($"Client {NewPlayer.Name}::{NewPlayer.npID} connecting..."); // they're clean + // todo: get this out of here while (chatHistory.Count > Math.Ceiling((double)ClientNum / 2)) chatHistory.RemoveAt(0); chatHistory.Add(new Chat(NewPlayer.Name, "CONNECTED", DateTime.Now)); @@ -216,7 +214,7 @@ namespace IW4MAdmin Leaving.Connections++; Manager.GetClientDatabase().updatePlayer(Leaving); - Log.Write("Client at " + cNum + " disconnecting...", Log.Level.Debug); + Logger.WriteInfo($"Client {Leaving.Name}::{Leaving.npID} disconnecting..."); await ExecuteEvent(new Event(Event.GType.Disconnect, "", Leaving, null, this)); Players[cNum] = null; @@ -229,7 +227,7 @@ namespace IW4MAdmin { if (L.Length < cIDPos) { - Log.Write("Line sent for client creation is not long enough!", Log.Level.Debug); + Logger.WriteError("Line sent for client creation is not long enough!"); return null; } @@ -241,8 +239,8 @@ namespace IW4MAdmin if (pID < 0 || pID > 17) { - Log.Write("Error event player index " + pID + " is out of bounds!", Log.Level.Debug); - Log.Write("Offending line -- " + String.Join(";", L), Log.Level.Debug); + Logger.WriteError("Event player index " + pID + " is out of bounds!"); + Logger.WriteDebug("Offending line -- " + String.Join(";", L)); return null; } @@ -256,8 +254,8 @@ namespace IW4MAdmin } catch (Exception) { - Log.Write("Client index is invalid - " + pID, Log.Level.Debug); - Log.Write(L.ToString(), Log.Level.Debug); + Logger.WriteError("Client index is invalid - " + pID); + Logger.WriteDebug(L.ToString()); return null; } } @@ -347,9 +345,9 @@ namespace IW4MAdmin catch (Exception Except) { - Log.Write(String.Format("The plugin \"{0}\" generated an error. ( see log )", P.Name), Log.Level.Production); - Log.Write(String.Format("Error Message: {0}", Except.Message), Log.Level.Debug); - Log.Write(String.Format("Error Trace: {0}", Except.StackTrace), Log.Level.Debug); + Logger.WriteError(String.Format("The plugin \"{0}\" generated an error. ( see log )", P.Name)); + Logger.WriteDebug(String.Format("Error Message: {0}", Except.Message)); + Logger.WriteDebug(String.Format("Error Trace: {0}", Except.StackTrace)); continue; } } @@ -528,11 +526,11 @@ namespace IW4MAdmin if (!File.Exists(logPath)) { - Log.Write($"Gamelog {logPath} does not exist!", Log.Level.All); + Logger.WriteError($"Gamelog {logPath} does not exist!"); } logFile = new IFile(logPath); - Log.Write("Log file is " + logPath, Log.Level.Debug); + Logger.WriteInfo("Log file is " + logPath); await ExecuteEvent(new Event(Event.GType.Start, "Server started", null, null, this)); //Bans = Manager.GetClientDatabase().getBans(); #if !DEBUG @@ -552,7 +550,7 @@ namespace IW4MAdmin { if (E.Origin == null) { - Log.Write("Disconnect event triggered, but no origin found.", Log.Level.Debug); + Logger.WriteError("Disconnect event triggered, but no origin found."); return; } @@ -568,7 +566,7 @@ namespace IW4MAdmin { if (E.Origin == null) { - Log.Write("Kill event triggered, but no origin found!", Log.Level.Debug); + Logger.WriteError("Kill event triggered, but no origin found!"); return; } @@ -591,14 +589,14 @@ namespace IW4MAdmin if (E.Origin == null) { - Log.Write("Say event triggered, but no origin found! - " + E.Data, Log.Level.Debug); + Logger.WriteError("Say event triggered, but no origin found! - " + E.Data); return; } if (E.Owner == null) { - Log.Write("Say event does not have an owner!", Log.Level.Debug); + Logger.WriteError("Say event does not have an owner!"); return; } @@ -613,7 +611,7 @@ namespace IW4MAdmin { if (C.needsTarget && E.Target == null) { - Log.Write("Requested event requiring target does not have a target!", Log.Level.Debug); + Logger.WriteError("Requested event requiring target does not have a target!"); return; } @@ -624,18 +622,12 @@ namespace IW4MAdmin catch (Exception Except) { - Log.Write(String.Format("A command request \"{0}\" generated an error.", C.Name, Log.Level.Debug)); - Log.Write(String.Format("Error Message: {0}", Except.Message), Log.Level.Debug); - Log.Write(String.Format("Error Trace: {0}", Except.StackTrace), Log.Level.Debug); + Logger.WriteError(String.Format("A command request \"{0}\" generated an error.", C.Name)); + Logger.WriteDebug(String.Format("Error Message: {0}", Except.Message)); + Logger.WriteDebug(String.Format("Error Trace: {0}", Except.StackTrace)); return; } } - - else - { - Log.Write("Player didn't properly enter command - " + E.Origin.Name, Log.Level.Debug); - return; - } } else @@ -659,7 +651,7 @@ namespace IW4MAdmin if (E.Type == Event.GType.MapChange) { - Log.Write("New map loaded - " + ClientNum + " active players", Log.Level.Debug); + Logger.WriteInfo($"New map loaded - {ClientNum} active players"); // make async Gametype = (await this.GetDvarAsync("g_gametype")).Value.StripColors(); @@ -674,7 +666,7 @@ namespace IW4MAdmin if (E.Type == Event.GType.MapEnd) { - Log.Write("Game ending...", Log.Level.Debug); + Logger.WriteInfo("Game ending..."); return; }; } @@ -728,7 +720,9 @@ namespace IW4MAdmin { if (Target == null) { - Log.Write("Something really bad happened, because there's no ban target!"); + Logger.WriteError("Ban target is null"); + Logger.WriteDebug($"Message: {Message}"); + Logger.WriteDebug($"Origin: {Origin.Name}::{Origin.npID}"); return; } @@ -746,7 +740,7 @@ namespace IW4MAdmin if (Origin != null) { Target.setLevel(Player.Permission.Banned); - Penalty newBan = new Penalty(Penalty.Type.Ban, Target.lastOffense, SharedLibrary.Utilities.StripColors(Target.npID), Origin.npID, DateTime.Now, Target.IP); + Penalty newBan = new Penalty(Penalty.Type.Ban, Target.lastOffense, Target.npID, Origin.npID, DateTime.Now, Target.IP); await Task.Run(() => { @@ -766,7 +760,7 @@ namespace IW4MAdmin foreach (Report R in toRemove) { Reports.Remove(R); - Log.Write("Removing report for banned GUID -- " + R.Origin.npID, Log.Level.Debug); + Logger.WriteInfo("Removing report for banned GUID - " + R.Origin.npID); } } } @@ -811,7 +805,7 @@ namespace IW4MAdmin } catch (Exception E) { - Log.Write("Unable to reload configs! - " + E.Message, Log.Level.Debug); + Logger.WriteError("Unable to reload configs! - " + E.Message); messages = new List(); maps = new List(); rules = new List(); diff --git a/Admin/WebService.cs b/Admin/WebService.cs index 201131234..87d641dbc 100644 --- a/Admin/WebService.cs +++ b/Admin/WebService.cs @@ -53,9 +53,8 @@ namespace IW4MAdmin catch (Exception e) { - Console.WriteLine("Unable to start webservice ( port is probably in use ): " + e.Message); - Thread.Sleep(5000); - Environment.Exit(-1); + Manager.GetInstance().Logger.WriteError($"Unable to start webservice ( port is probably in use ): {e.Message}"); + } } diff --git a/Admin/lib/SharedLibrary.dll b/Admin/lib/SharedLibrary.dll index 0ca9621d0b5d590b855b32783b78cc3e2236054d..b357a130bce3292fe39b302e34a1c193722ef218 100644 GIT binary patch literal 101888 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 z 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

wN}}eRQ-h&w?Db`M(Yf4 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 w>N91&QOY!RX) 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 0) - { - String firstLine = Handle.ReadLine(); - String[] Parms = firstLine.Split(':'); - if (Parms.Length < num) - return null; - else - return Parms; - } - - return null; - } public void Close() { diff --git a/SharedLibrary/Interfaces/ILogger.cs b/SharedLibrary/Interfaces/ILogger.cs new file mode 100644 index 000000000..1471a5359 --- /dev/null +++ b/SharedLibrary/Interfaces/ILogger.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SharedLibrary.Interfaces +{ + public interface ILogger + { + void WriteVerbose(string msg); + void WriteInfo(string msg); + void WriteDebug(string msg); + void WriteWarning(string msg); + void WriteError(string msg); + } +} diff --git a/SharedLibrary/Interfaces/IManager.cs b/SharedLibrary/Interfaces/IManager.cs index 4eae7cde6..119b943be 100644 --- a/SharedLibrary/Interfaces/IManager.cs +++ b/SharedLibrary/Interfaces/IManager.cs @@ -11,6 +11,7 @@ namespace SharedLibrary.Interfaces void Init(); void Start(); void Stop(); + ILogger GetLogger(); List GetServers(); List GetCommands(); IPenaltyList GetClientPenalties(); diff --git a/SharedLibrary/Log.cs b/SharedLibrary/Log.cs deleted file mode 100644 index 41ac13123..000000000 --- a/SharedLibrary/Log.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace SharedLibrary -{ - public class Log - { - public enum Level - { - All, - Debug, - Production, - None, - } - - public Log(IFile logf, Level mode, int port) - { - logFile = logf; - logMode = mode; - Identifier = port; - } - - public void Write(String line) - { - Write(line, Level.Debug); - } - - public void Write(String line, Level lv) - { - String Line = String.Format("{1} - [{0}]: {2}", Identifier, getTime(), line); - switch (logMode) - { - case Level.All: - if (lv == Level.All || lv == Level.Debug || lv == Level.Production) - Console.WriteLine(Line); - break; - case Level.Debug: - if (lv == Level.All || lv == Level.Debug) - Console.WriteLine(Line); - break; - case Level.Production: - if (lv == Level.Production) - Console.WriteLine(Line); - break; - } - - logFile.Write(Line); - } - - private string getTime() - { - return DateTime.Now.ToString("HH:mm:ss"); - } - - private IFile logFile; - private Level logMode; - private int Identifier; - } -} diff --git a/SharedLibrary/Server.cs b/SharedLibrary/Server.cs index 94c6e3b70..3a985551b 100644 --- a/SharedLibrary/Server.cs +++ b/SharedLibrary/Server.cs @@ -20,13 +20,8 @@ namespace SharedLibrary IP = address; Port = port; Manager = mgr; + Logger = Manager.GetLogger(); ClientNum = 0; - logFile = new IFile($"Logs/{address}_{port}.log", true); -#if DEBUG - Log = new Log(logFile, Log.Level.Debug, port); -#else - Log = new Log(logFile, Log.Level.Production, port); -#endif aliasDB = new AliasesDB("Database/aliases.rm"); Players = new List(new Player[18]); @@ -358,7 +353,7 @@ namespace SharedLibrary } } else - Log.Write("Maps configuration appears to be empty - skipping...", Log.Level.All); + Logger.WriteInfo("Maps configuration appears to be empty - skipping..."); } ///

@@ -374,7 +369,7 @@ namespace SharedLibrary if (lines.Length < 2) //readAll returns minimum one empty string { - Log.Write("Messages configuration appears empty - skipping...", Log.Level.All); + Logger.WriteInfo("Messages configuration appears empty - skipping..."); return; } @@ -417,7 +412,7 @@ namespace SharedLibrary } } else - Log.Write("Rules configuration appears empty - skipping...", Log.Level.All); + Logger.WriteInfo("Rules configuration appears empty - skipping..."); ruleFile.Close(); } @@ -429,7 +424,7 @@ namespace SharedLibrary //Objects public Interfaces.IManager Manager { get; protected set; } - public Log Log { get; private set; } + public Interfaces.ILogger Logger { get; private set; } public Player owner; public List maps; public List rules; diff --git a/SharedLibrary/SharedLibrary.csproj b/SharedLibrary/SharedLibrary.csproj index 578c6e344..365a09e2f 100644 --- a/SharedLibrary/SharedLibrary.csproj +++ b/SharedLibrary/SharedLibrary.csproj @@ -59,6 +59,7 @@ + @@ -68,7 +69,6 @@ - diff --git a/SharedLibrary/Utilities.cs b/SharedLibrary/Utilities.cs index dbe7135d0..ae6b95c10 100644 --- a/SharedLibrary/Utilities.cs +++ b/SharedLibrary/Utilities.cs @@ -127,8 +127,7 @@ namespace SharedLibrary { String Match = M.Value; String Identifier = M.Value.Substring(2, M.Length - 4); - Object foundVal; - Dict.TryGetValue(Identifier, out foundVal); + Dict.TryGetValue(Identifier, out object foundVal); String Replacement; if (foundVal != null) diff --git a/Stats Plugin/Plugin.cs b/Stats Plugin/Plugin.cs index 64786b865..1a37e2d37 100644 --- a/Stats Plugin/Plugin.cs +++ b/Stats Plugin/Plugin.cs @@ -149,7 +149,7 @@ namespace StatsPlugin calculateAndSaveSkill(P, statLists.Find(x =>x.Port == S.getPort())); resetCounters(P.clientID, S.getPort()); - E.Owner.Log.Write("Updated skill for client #" + P.databaseID, Log.Level.Debug); + E.Owner.Logger.WriteInfo("Updated skill for client #" + P.databaseID); //E.Owner.Log.Write(String.Format("\r\nJoin: {0}\r\nInactive Minutes: {1}\r\nnewPlayTime: {2}\r\nnewSPM: {3}\r\nkdrWeight: {4}\r\nMultiplier: {5}\r\nscoreWeight: {6}\r\nnewSkillFactor: {7}\r\nprojectedNewSkill: {8}\r\nKills: {9}\r\nDeaths: {10}", connectionTime[P.clientID].ToShortTimeString(), inactiveMinutes[P.clientID], newPlayTime, newSPM, kdrWeight, Multiplier, scoreWeight, newSkillFactor, disconnectStats.Skill, disconnectStats.Kills, disconnectStats.Deaths)); } } @@ -158,7 +158,7 @@ namespace StatsPlugin { calculateAndSaveSkill(E.Origin, statLists.Find(x=>x.Port == S.getPort())); resetCounters(E.Origin.clientID, S.getPort()); - E.Owner.Log.Write("Updated skill for disconnecting client #" + E.Origin.databaseID, Log.Level.Debug); + E.Owner.Logger.WriteInfo("Updated skill for disconnecting client #" + E.Origin.databaseID); } if (E.Type == Event.GType.Kill) diff --git a/Welcome Plugin/CountryLookup.cs b/Welcome Plugin/CountryLookup.cs index 1f9dc772d..a978700b4 100644 --- a/Welcome Plugin/CountryLookup.cs +++ b/Welcome Plugin/CountryLookup.cs @@ -40,7 +40,7 @@ namespace CountryLookupProj "O1","AX","GG","IM","JE","BL","MF" }; private static string[] countryName = - {"N/A","Asia/Pacific Region","Europe","Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Netherlands Antilles","Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Azerbaijan","Bosnia and Herzegovina","Barbados","Bangladesh","Belgium", + {"An Unknown Country","Asia/Pacific Region","Europe","Andorra","United Arab Emirates","Afghanistan","Antigua and Barbuda","Anguilla","Albania","Armenia","Netherlands Antilles","Angola","Antarctica","Argentina","American Samoa","Austria","Australia","Aruba","Azerbaijan","Bosnia and Herzegovina","Barbados","Bangladesh","Belgium", "Burkina Faso","Bulgaria","Bahrain","Burundi","Benin","Bermuda","Brunei Darussalam","Bolivia","Brazil","Bahamas","Bhutan","Bouvet Island","Botswana","Belarus","Belize","Canada","Cocos (Keeling) Islands","Congo, The Democratic Republic of the","Central African Republic","Congo","Switzerland","Cote D'Ivoire", "Cook Islands","Chile","Cameroon","China","Colombia","Costa Rica","Cuba","Cape Verde","Christmas Island","Cyprus","Czech Republic","Germany","Djibouti","Denmark","Dominica","Dominican Republic","Algeria","Ecuador","Estonia","Egypt","Western Sahara","Eritrea","Spain","Ethiopia","Finland","Fiji","Falkland Islands (Malvinas)", "Micronesia, Federated States of","Faroe Islands","France","France, Metropolitan","Gabon","United Kingdom","Grenada","Georgia","French Guiana","Ghana","Gibraltar","Greenland","Gambia","Guinea","Guadeloupe","Equatorial Guinea","Greece","South Georgia and the South Sandwich Islands","Guatemala","Guam","Guinea-Bissau","Guyana", @@ -56,14 +56,7 @@ namespace CountryLookupProj public CountryLookup(string fileName) { - try - { - fileInput = new FileStream(fileName, FileMode.Open, FileAccess.Read); - } - catch (FileNotFoundException) - { - Console.WriteLine("File " + fileName + " not found."); - } + fileInput = new FileStream(fileName, FileMode.Open, FileAccess.Read); } public string lookupCountryCode(string str) @@ -93,13 +86,12 @@ namespace CountryLookupProj } ipnum += y << ((3 - i) * 8); } - //Console.WriteLine(ipnum); return ipnum; } public string lookupCountryCode(IPAddress addr) { - return (countryCode[(int)seekCountry(0, addrToNum(addr), 31)]); + return (countryCode[(int)SeekCountry(0, addrToNum(addr), 31)]); } public string lookupCountryName(string str) @@ -111,33 +103,24 @@ namespace CountryLookupProj } catch (FormatException) { - return "N/A"; + return "An Unknown Country"; } return lookupCountryName(addr); } public string lookupCountryName(IPAddress addr) { - return (countryName[(int)seekCountry(0, addrToNum(addr), 31)]); + return (countryName[(int)SeekCountry(0, addrToNum(addr), 31)]); } - private long seekCountry(long offset, long ipnum, int depth) + private long SeekCountry(long offset, long ipnum, int depth) { byte[] buf = new byte[6]; long[] x = new long[2]; - if (depth == 0) - { - Console.WriteLine("Error seeking country."); - } - try - { - fileInput.Seek(6 * offset, 0); - fileInput.Read(buf, 0, 6); - } - catch (IOException) - { - Console.WriteLine("IO Exception"); - } + + fileInput.Seek(6 * offset, 0); + fileInput.Read(buf, 0, 6); + for (int i = 0; i < 2; i++) { x[i] = 0; @@ -158,7 +141,7 @@ namespace CountryLookupProj { return x[1] - COUNTRY_BEGIN; } - return seekCountry(x[1], ipnum, depth - 1); + return SeekCountry(x[1], ipnum, depth - 1); } else { @@ -166,7 +149,7 @@ namespace CountryLookupProj { return x[0] - COUNTRY_BEGIN; } - return seekCountry(x[0], ipnum, depth - 1); + return SeekCountry(x[0], ipnum, depth - 1); } } } diff --git a/Welcome Plugin/Plugin.cs b/Welcome Plugin/Plugin.cs index 68584c9fb..835e77cee 100644 --- a/Welcome Plugin/Plugin.cs +++ b/Welcome Plugin/Plugin.cs @@ -60,8 +60,17 @@ namespace Welcome_Plugin else { - CountryLookupProj.CountryLookup CLT = new CountryLookupProj.CountryLookup("Plugins/GeoIP.dat"); - await E.Owner.Broadcast($"^5{newPlayer.Name} ^7hails from ^5{CLT.lookupCountryName(newPlayer.IP)}"); + try + { + CountryLookupProj.CountryLookup CLT = new CountryLookupProj.CountryLookup("Plugins/GeoIP.dat"); + await E.Owner.Broadcast($"^5{newPlayer.Name} ^7hails from ^5{CLT.lookupCountryName(newPlayer.IP)}"); + } + + catch (Exception) + { + E.Owner.Manager.GetLogger().WriteError("Could not open file Plugins/GeoIP.dat for Welcome Plugin"); + } + } } }