Redid the logging system
This commit is contained in:
parent
c1faf8a02e
commit
ac7908de91
@ -113,6 +113,7 @@
|
|||||||
<Compile Include="Connection.cs" />
|
<Compile Include="Connection.cs" />
|
||||||
<Compile Include="Heartbeat.cs" />
|
<Compile Include="Heartbeat.cs" />
|
||||||
<Compile Include="Kayak.cs" />
|
<Compile Include="Kayak.cs" />
|
||||||
|
<Compile Include="Logger.cs" />
|
||||||
<Compile Include="Main.cs" />
|
<Compile Include="Main.cs" />
|
||||||
<Compile Include="Manager.cs" />
|
<Compile Include="Manager.cs" />
|
||||||
<Compile Include="PenaltyList.cs" />
|
<Compile Include="PenaltyList.cs" />
|
||||||
|
@ -13,12 +13,12 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
public void OnException(IScheduler scheduler, Exception e)
|
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)
|
public void OnStop(IScheduler scheduler)
|
||||||
{
|
{
|
||||||
Manager.GetInstance().Logger.Write("Web service has been stopped...");
|
Manager.GetInstance().Logger.WriteDebug("Web service has been stopped...");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
70
Admin/Logger.cs
Normal file
70
Admin/Logger.cs
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -117,6 +117,9 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (!Directory.Exists("Database"))
|
if (!Directory.Exists("Database"))
|
||||||
Directory.CreateDirectory("Database");
|
Directory.CreateDirectory("Database");
|
||||||
|
|
||||||
|
if (!Directory.Exists("Plugins"))
|
||||||
|
Directory.CreateDirectory("Plugins");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ namespace IW4MAdmin
|
|||||||
List<Command> Commands;
|
List<Command> Commands;
|
||||||
Kayak.IScheduler webServiceTask;
|
Kayak.IScheduler webServiceTask;
|
||||||
Thread WebThread;
|
Thread WebThread;
|
||||||
|
public SharedLibrary.Interfaces.ILogger Logger { get; private set; }
|
||||||
public bool Running { get; private set; }
|
public bool Running { get; private set; }
|
||||||
#if FTP_LOG
|
#if FTP_LOG
|
||||||
const double UPDATE_FREQUENCY = 15000;
|
const double UPDATE_FREQUENCY = 15000;
|
||||||
@ -29,12 +30,11 @@ namespace IW4MAdmin
|
|||||||
const double UPDATE_FREQUENCY = 300;
|
const double UPDATE_FREQUENCY = 300;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
public Log Logger;
|
|
||||||
|
|
||||||
private Manager()
|
private Manager()
|
||||||
{
|
{
|
||||||
IFile logFile = new IFile("Logs/IW4MAdminManager.log", true);
|
//IFile logFile = new IFile("Logs/IW4MAdminManager.log", true);
|
||||||
Logger = new Log(logFile, Log.Level.Production, 0);
|
Logger = new Logger("Logs/IW4MAdmin.log");
|
||||||
|
//Logger = new Log(logFile, Log.Level.Production, 0);
|
||||||
Servers = new List<Server>();
|
Servers = new List<Server>();
|
||||||
Commands = new List<Command>();
|
Commands = new List<Command>();
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
public static Manager GetInstance()
|
public static Manager GetInstance()
|
||||||
{
|
{
|
||||||
return Instance == null ? Instance = new Manager() : Instance;
|
return Instance ?? (Instance = new Manager());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Init()
|
public void Init()
|
||||||
@ -78,16 +78,16 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
await ServerInstance.Initialize();
|
await ServerInstance.Initialize();
|
||||||
Servers.Add(ServerInstance);
|
Servers.Add(ServerInstance);
|
||||||
Logger.Write($"Now monitoring {ServerInstance.Hostname}", Log.Level.Production);
|
Logger.WriteVerbose($"Now monitoring {ServerInstance.Hostname}");
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (SharedLibrary.Exceptions.ServerException e)
|
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))
|
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))
|
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;
|
return ClientPenalties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SharedLibrary.Interfaces.ILogger GetLogger()
|
||||||
|
{
|
||||||
|
return Logger;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,13 +24,13 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Manager.GetInstance().Logger.Write("Plugin folder does not exist!", Log.Level.All);
|
Manager.GetInstance().Logger.WriteWarning("Plugin folder does not exist!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dllFileNames == null || dllFileNames.Length == 0)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +42,8 @@ namespace IW4MAdmin
|
|||||||
assemblies.Add(assembly);
|
assemblies.Add(assembly);
|
||||||
}
|
}
|
||||||
|
|
||||||
int totalLoaded = 0;
|
int LoadedPlugins = 0;
|
||||||
|
int LoadedCommands = 0;
|
||||||
foreach (Assembly Plugin in assemblies)
|
foreach (Assembly Plugin in assemblies)
|
||||||
{
|
{
|
||||||
if (Plugin != null)
|
if (Plugin != null)
|
||||||
@ -55,8 +56,8 @@ namespace IW4MAdmin
|
|||||||
Object commandObject = Activator.CreateInstance(assemblyType);
|
Object commandObject = Activator.CreateInstance(assemblyType);
|
||||||
Command newCommand = (Command)commandObject;
|
Command newCommand = (Command)commandObject;
|
||||||
potentialCommands.Add(newCommand);
|
potentialCommands.Add(newCommand);
|
||||||
Manager.GetInstance().Logger.Write("Registered command \"" + newCommand.Name + "\"", Log.Level.Debug);
|
Manager.GetInstance().Logger.WriteDebug("Registered command \"" + newCommand.Name + "\"");
|
||||||
totalLoaded++;
|
LoadedCommands++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,20 +72,20 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
potentialPlugins.Add(newNotify);
|
potentialPlugins.Add(newNotify);
|
||||||
newNotify.OnLoadAsync();
|
newNotify.OnLoadAsync();
|
||||||
Manager.GetInstance().Logger.Write("Loaded plugin \"" + newNotify.Name + "\"" + " [" + newNotify.Version + "]", Log.Level.Debug);
|
Manager.GetInstance().Logger.WriteDebug($"Loaded plugin \"{ newNotify.Name }\" [{newNotify.Version}]");
|
||||||
totalLoaded++;
|
LoadedPlugins++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (Exception E)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
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;
|
return true;
|
||||||
|
|
||||||
Log.Write("Client slot #" + P.clientID + " now reserved", Log.Level.Debug);
|
Logger.WriteDebug($"Client slot #{P.clientID} now reserved");
|
||||||
|
|
||||||
|
|
||||||
#if DEBUG == false
|
#if DEBUG == false
|
||||||
@ -72,7 +72,7 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (NewPlayer == null) // first time connecting
|
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);
|
Manager.GetClientDatabase().addPlayer(P);
|
||||||
NewPlayer = Manager.GetClientDatabase().getPlayer(P.npID, P.clientID);
|
NewPlayer = Manager.GetClientDatabase().getPlayer(P.npID, P.clientID);
|
||||||
aliasDB.addPlayer(new Aliases(NewPlayer.databaseID, NewPlayer.Name, NewPlayer.IP));
|
aliasDB.addPlayer(new Aliases(NewPlayer.databaseID, NewPlayer.Name, NewPlayer.IP));
|
||||||
@ -124,7 +124,7 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
String Message;
|
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)
|
if (NewPlayer.lastOffense != null)
|
||||||
Message = "Previously banned for ^5" + NewPlayer.lastOffense;
|
Message = "Previously banned for ^5" + NewPlayer.lastOffense;
|
||||||
@ -158,7 +158,7 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (B != null && B.BType == Penalty.Type.Ban)
|
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);
|
NewPlayer.lastOffense = String.Format("Evading ( {0} )", aP.Name);
|
||||||
|
|
||||||
if (B.Reason != null)
|
if (B.Reason != null)
|
||||||
@ -183,11 +183,9 @@ namespace IW4MAdmin
|
|||||||
#if DEBUG == FALSE
|
#if DEBUG == FALSE
|
||||||
await NewPlayer.Tell($"Welcome ^5{NewPlayer.Name} ^7this is your ^5{NewPlayer.TimesConnected()} ^7time connecting!");
|
await NewPlayer.Tell($"Welcome ^5{NewPlayer.Name} ^7this is your ^5{NewPlayer.TimesConnected()} ^7time connecting!");
|
||||||
#endif
|
#endif
|
||||||
if (NewPlayer.Name == "nosTEAM")
|
Logger.WriteInfo($"Client {NewPlayer.Name}::{NewPlayer.npID} connecting..."); // they're clean
|
||||||
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
|
|
||||||
|
|
||||||
|
// todo: get this out of here
|
||||||
while (chatHistory.Count > Math.Ceiling((double)ClientNum / 2))
|
while (chatHistory.Count > Math.Ceiling((double)ClientNum / 2))
|
||||||
chatHistory.RemoveAt(0);
|
chatHistory.RemoveAt(0);
|
||||||
chatHistory.Add(new Chat(NewPlayer.Name, "<i>CONNECTED</i>", DateTime.Now));
|
chatHistory.Add(new Chat(NewPlayer.Name, "<i>CONNECTED</i>", DateTime.Now));
|
||||||
@ -216,7 +214,7 @@ namespace IW4MAdmin
|
|||||||
Leaving.Connections++;
|
Leaving.Connections++;
|
||||||
Manager.GetClientDatabase().updatePlayer(Leaving);
|
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));
|
await ExecuteEvent(new Event(Event.GType.Disconnect, "", Leaving, null, this));
|
||||||
Players[cNum] = null;
|
Players[cNum] = null;
|
||||||
|
|
||||||
@ -229,7 +227,7 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
if (L.Length < cIDPos)
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,8 +239,8 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (pID < 0 || pID > 17)
|
if (pID < 0 || pID > 17)
|
||||||
{
|
{
|
||||||
Log.Write("Error event player index " + pID + " is out of bounds!", Log.Level.Debug);
|
Logger.WriteError("Event player index " + pID + " is out of bounds!");
|
||||||
Log.Write("Offending line -- " + String.Join(";", L), Log.Level.Debug);
|
Logger.WriteDebug("Offending line -- " + String.Join(";", L));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,8 +254,8 @@ namespace IW4MAdmin
|
|||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
Log.Write("Client index is invalid - " + pID, Log.Level.Debug);
|
Logger.WriteError("Client index is invalid - " + pID);
|
||||||
Log.Write(L.ToString(), Log.Level.Debug);
|
Logger.WriteDebug(L.ToString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -347,9 +345,9 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
catch (Exception Except)
|
catch (Exception Except)
|
||||||
{
|
{
|
||||||
Log.Write(String.Format("The plugin \"{0}\" generated an error. ( see log )", P.Name), Log.Level.Production);
|
Logger.WriteError(String.Format("The plugin \"{0}\" generated an error. ( see log )", P.Name));
|
||||||
Log.Write(String.Format("Error Message: {0}", Except.Message), Log.Level.Debug);
|
Logger.WriteDebug(String.Format("Error Message: {0}", Except.Message));
|
||||||
Log.Write(String.Format("Error Trace: {0}", Except.StackTrace), Log.Level.Debug);
|
Logger.WriteDebug(String.Format("Error Trace: {0}", Except.StackTrace));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -528,11 +526,11 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (!File.Exists(logPath))
|
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);
|
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));
|
await ExecuteEvent(new Event(Event.GType.Start, "Server started", null, null, this));
|
||||||
//Bans = Manager.GetClientDatabase().getBans();
|
//Bans = Manager.GetClientDatabase().getBans();
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
@ -552,7 +550,7 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
if (E.Origin == null)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -568,7 +566,7 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
if (E.Origin == null)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -591,14 +589,14 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (E.Origin == null)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (E.Owner == null)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -613,7 +611,7 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
if (C.needsTarget && E.Target == null)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -624,18 +622,12 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
catch (Exception Except)
|
catch (Exception Except)
|
||||||
{
|
{
|
||||||
Log.Write(String.Format("A command request \"{0}\" generated an error.", C.Name, Log.Level.Debug));
|
Logger.WriteError(String.Format("A command request \"{0}\" generated an error.", C.Name));
|
||||||
Log.Write(String.Format("Error Message: {0}", Except.Message), Log.Level.Debug);
|
Logger.WriteDebug(String.Format("Error Message: {0}", Except.Message));
|
||||||
Log.Write(String.Format("Error Trace: {0}", Except.StackTrace), Log.Level.Debug);
|
Logger.WriteDebug(String.Format("Error Trace: {0}", Except.StackTrace));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log.Write("Player didn't properly enter command - " + E.Origin.Name, Log.Level.Debug);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -659,7 +651,7 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (E.Type == Event.GType.MapChange)
|
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
|
// make async
|
||||||
Gametype = (await this.GetDvarAsync<string>("g_gametype")).Value.StripColors();
|
Gametype = (await this.GetDvarAsync<string>("g_gametype")).Value.StripColors();
|
||||||
@ -674,7 +666,7 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
if (E.Type == Event.GType.MapEnd)
|
if (E.Type == Event.GType.MapEnd)
|
||||||
{
|
{
|
||||||
Log.Write("Game ending...", Log.Level.Debug);
|
Logger.WriteInfo("Game ending...");
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -728,7 +720,9 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
if (Target == null)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -746,7 +740,7 @@ namespace IW4MAdmin
|
|||||||
if (Origin != null)
|
if (Origin != null)
|
||||||
{
|
{
|
||||||
Target.setLevel(Player.Permission.Banned);
|
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(() =>
|
await Task.Run(() =>
|
||||||
{
|
{
|
||||||
@ -766,7 +760,7 @@ namespace IW4MAdmin
|
|||||||
foreach (Report R in toRemove)
|
foreach (Report R in toRemove)
|
||||||
{
|
{
|
||||||
Reports.Remove(R);
|
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)
|
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<String>();
|
messages = new List<String>();
|
||||||
maps = new List<Map>();
|
maps = new List<Map>();
|
||||||
rules = new List<String>();
|
rules = new List<String>();
|
||||||
|
@ -53,9 +53,8 @@ namespace IW4MAdmin
|
|||||||
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Unable to start webservice ( port is probably in use ): " + e.Message);
|
Manager.GetInstance().Logger.WriteError($"Unable to start webservice ( port is probably in use ): {e.Message}");
|
||||||
Thread.Sleep(5000);
|
|
||||||
Environment.Exit(-1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
@ -41,7 +41,7 @@ namespace Auto_Restart_Plugin
|
|||||||
|
|
||||||
catch (Exception E)
|
catch (Exception E)
|
||||||
{
|
{
|
||||||
goodBye.Log.Write("SOMETHING FUCKED UP BEYOND ALL REPAIR " + E.ToString());
|
//goodBye.Log.Write("SOMETHING FUCKED UP BEYOND ALL REPAIR " + E.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,6 @@ namespace MessageBoard.Forum
|
|||||||
{
|
{
|
||||||
Session newSession = getSession(sessionID);
|
Session newSession = getSession(sessionID);
|
||||||
newSession.sessionStartTime = DateTime.Now;
|
newSession.sessionStartTime = DateTime.Now;
|
||||||
//Console.WriteLine("Matching session was found - {0}", sessionID);
|
|
||||||
addSession(newSession);
|
addSession(newSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ namespace SharedLibrary.Commands
|
|||||||
|
|
||||||
public override async Task ExecuteAsync(Event E)
|
public override async Task ExecuteAsync(Event E)
|
||||||
{
|
{
|
||||||
await E.Owner.Broadcast($"Fast restarting in ^53 ^7seconds [^5{E.Origin.Name}]");
|
await E.Owner.Broadcast($"Fast restarting in ^53 ^7seconds [^5{E.Origin.Name}^7]");
|
||||||
await Task.Delay(3000);
|
await Task.Delay(3000);
|
||||||
await E.Owner.ExecuteCommandAsync("fast_restart");
|
await E.Owner.ExecuteCommandAsync("fast_restart");
|
||||||
}
|
}
|
||||||
@ -248,7 +248,7 @@ namespace SharedLibrary.Commands
|
|||||||
|
|
||||||
public override async Task ExecuteAsync(Event E)
|
public override async Task ExecuteAsync(Event E)
|
||||||
{
|
{
|
||||||
await E.Owner.Broadcast($"Map rotating in ^55 ^7seconds [^5{E.Origin.Name}]");
|
await E.Owner.Broadcast($"Map rotating in ^55 ^7seconds [^5{E.Origin.Name}^7]");
|
||||||
await Task.Delay(5000);
|
await Task.Delay(5000);
|
||||||
await E.Owner.ExecuteCommandAsync("map_rotate");
|
await E.Owner.ExecuteCommandAsync("map_rotate");
|
||||||
}
|
}
|
||||||
|
@ -13,18 +13,7 @@ namespace SharedLibrary
|
|||||||
{
|
{
|
||||||
FileName = FN;
|
FileName = FN;
|
||||||
DBCon = String.Format("Data Source={0}", FN);
|
DBCon = String.Format("Data Source={0}", FN);
|
||||||
try
|
Con = new SQLiteConnection(DBCon);
|
||||||
{
|
|
||||||
Con = new SQLiteConnection(DBCon);
|
|
||||||
}
|
|
||||||
|
|
||||||
catch (DllNotFoundException)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Fatal Error: could not locate the SQLite DLL(s)!\nEnsure they are located in the 'lib' folder");
|
|
||||||
Utilities.Wait(5);
|
|
||||||
Environment.Exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
Open = false;
|
Open = false;
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
@ -130,6 +119,7 @@ namespace SharedLibrary
|
|||||||
|
|
||||||
catch (Exception E)
|
catch (Exception E)
|
||||||
{
|
{
|
||||||
|
// fixme: this needs to have a reference to a logger..
|
||||||
Console.WriteLine(E.Message);
|
Console.WriteLine(E.Message);
|
||||||
Console.WriteLine(E.StackTrace);
|
Console.WriteLine(E.StackTrace);
|
||||||
Console.WriteLine(Request);
|
Console.WriteLine(Request);
|
||||||
@ -205,7 +195,7 @@ namespace SharedLibrary
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Console.WriteLine(e.Message + " GetDataTable");
|
Console.WriteLine($"Line 198: {e.Message}");
|
||||||
return new DataTable();
|
return new DataTable();
|
||||||
}
|
}
|
||||||
return dt;
|
return dt;
|
||||||
|
@ -20,22 +20,6 @@ namespace SharedLibrary
|
|||||||
|
|
||||||
Name = (fileName.Split('/'))[fileName.Split('/').Length - 1];
|
Name = (fileName.Split('/'))[fileName.Split('/').Length - 1];
|
||||||
|
|
||||||
//if (!Directory.Exists(_Directory))
|
|
||||||
// Directory.CreateDirectory(_Directory);
|
|
||||||
|
|
||||||
if (!File.Exists(fileName))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
//FileStream penis = File.Create(fileName);
|
|
||||||
//penis.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
Console.WriteLine("Unable to create file!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -89,20 +73,6 @@ namespace SharedLibrary
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getParameters(int num)
|
|
||||||
{
|
|
||||||
if (sze > 0)
|
|
||||||
{
|
|
||||||
String firstLine = Handle.ReadLine();
|
|
||||||
String[] Parms = firstLine.Split(':');
|
|
||||||
if (Parms.Length < num)
|
|
||||||
return null;
|
|
||||||
else
|
|
||||||
return Parms;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
{
|
{
|
||||||
|
17
SharedLibrary/Interfaces/ILogger.cs
Normal file
17
SharedLibrary/Interfaces/ILogger.cs
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,7 @@ namespace SharedLibrary.Interfaces
|
|||||||
void Init();
|
void Init();
|
||||||
void Start();
|
void Start();
|
||||||
void Stop();
|
void Stop();
|
||||||
|
ILogger GetLogger();
|
||||||
List<Server> GetServers();
|
List<Server> GetServers();
|
||||||
List<Command> GetCommands();
|
List<Command> GetCommands();
|
||||||
IPenaltyList GetClientPenalties();
|
IPenaltyList GetClientPenalties();
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -20,13 +20,8 @@ namespace SharedLibrary
|
|||||||
IP = address;
|
IP = address;
|
||||||
Port = port;
|
Port = port;
|
||||||
Manager = mgr;
|
Manager = mgr;
|
||||||
|
Logger = Manager.GetLogger();
|
||||||
ClientNum = 0;
|
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");
|
aliasDB = new AliasesDB("Database/aliases.rm");
|
||||||
|
|
||||||
Players = new List<Player>(new Player[18]);
|
Players = new List<Player>(new Player[18]);
|
||||||
@ -358,7 +353,7 @@ namespace SharedLibrary
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Log.Write("Maps configuration appears to be empty - skipping...", Log.Level.All);
|
Logger.WriteInfo("Maps configuration appears to be empty - skipping...");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -374,7 +369,7 @@ namespace SharedLibrary
|
|||||||
|
|
||||||
if (lines.Length < 2) //readAll returns minimum one empty string
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -417,7 +412,7 @@ namespace SharedLibrary
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Log.Write("Rules configuration appears empty - skipping...", Log.Level.All);
|
Logger.WriteInfo("Rules configuration appears empty - skipping...");
|
||||||
|
|
||||||
ruleFile.Close();
|
ruleFile.Close();
|
||||||
}
|
}
|
||||||
@ -429,7 +424,7 @@ namespace SharedLibrary
|
|||||||
|
|
||||||
//Objects
|
//Objects
|
||||||
public Interfaces.IManager Manager { get; protected set; }
|
public Interfaces.IManager Manager { get; protected set; }
|
||||||
public Log Log { get; private set; }
|
public Interfaces.ILogger Logger { get; private set; }
|
||||||
public Player owner;
|
public Player owner;
|
||||||
public List<Map> maps;
|
public List<Map> maps;
|
||||||
public List<String> rules;
|
public List<String> rules;
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
<Compile Include="Exceptions\DvarException.cs" />
|
<Compile Include="Exceptions\DvarException.cs" />
|
||||||
<Compile Include="Exceptions\NetworkException.cs" />
|
<Compile Include="Exceptions\NetworkException.cs" />
|
||||||
<Compile Include="Exceptions\ServerException.cs" />
|
<Compile Include="Exceptions\ServerException.cs" />
|
||||||
|
<Compile Include="Interfaces\ILogger.cs" />
|
||||||
<Compile Include="Interfaces\IManager.cs" />
|
<Compile Include="Interfaces\IManager.cs" />
|
||||||
<Compile Include="Interfaces\IPenaltyList.cs" />
|
<Compile Include="Interfaces\IPenaltyList.cs" />
|
||||||
<Compile Include="Interfaces\ISerializable.cs" />
|
<Compile Include="Interfaces\ISerializable.cs" />
|
||||||
@ -68,7 +69,6 @@
|
|||||||
<Compile Include="Event.cs" />
|
<Compile Include="Event.cs" />
|
||||||
<Compile Include="File.cs" />
|
<Compile Include="File.cs" />
|
||||||
<Compile Include="Dvar.cs" />
|
<Compile Include="Dvar.cs" />
|
||||||
<Compile Include="Log.cs" />
|
|
||||||
<Compile Include="Map.cs" />
|
<Compile Include="Map.cs" />
|
||||||
<Compile Include="Miscellaneous.cs" />
|
<Compile Include="Miscellaneous.cs" />
|
||||||
<Compile Include="Player.cs" />
|
<Compile Include="Player.cs" />
|
||||||
|
@ -127,8 +127,7 @@ namespace SharedLibrary
|
|||||||
{
|
{
|
||||||
String Match = M.Value;
|
String Match = M.Value;
|
||||||
String Identifier = M.Value.Substring(2, M.Length - 4);
|
String Identifier = M.Value.Substring(2, M.Length - 4);
|
||||||
Object foundVal;
|
Dict.TryGetValue(Identifier, out object foundVal);
|
||||||
Dict.TryGetValue(Identifier, out foundVal);
|
|
||||||
String Replacement;
|
String Replacement;
|
||||||
|
|
||||||
if (foundVal != null)
|
if (foundVal != null)
|
||||||
|
@ -149,7 +149,7 @@ namespace StatsPlugin
|
|||||||
calculateAndSaveSkill(P, statLists.Find(x =>x.Port == S.getPort()));
|
calculateAndSaveSkill(P, statLists.Find(x =>x.Port == S.getPort()));
|
||||||
resetCounters(P.clientID, 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));
|
//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()));
|
calculateAndSaveSkill(E.Origin, statLists.Find(x=>x.Port == S.getPort()));
|
||||||
resetCounters(E.Origin.clientID, 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)
|
if (E.Type == Event.GType.Kill)
|
||||||
|
@ -40,7 +40,7 @@ namespace CountryLookupProj
|
|||||||
"O1","AX","GG","IM","JE","BL","MF"
|
"O1","AX","GG","IM","JE","BL","MF"
|
||||||
};
|
};
|
||||||
private static string[] countryName =
|
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",
|
"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)",
|
"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",
|
"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)
|
public CountryLookup(string fileName)
|
||||||
{
|
{
|
||||||
try
|
fileInput = new FileStream(fileName, FileMode.Open, FileAccess.Read);
|
||||||
{
|
|
||||||
fileInput = new FileStream(fileName, FileMode.Open, FileAccess.Read);
|
|
||||||
}
|
|
||||||
catch (FileNotFoundException)
|
|
||||||
{
|
|
||||||
Console.WriteLine("File " + fileName + " not found.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string lookupCountryCode(string str)
|
public string lookupCountryCode(string str)
|
||||||
@ -93,13 +86,12 @@ namespace CountryLookupProj
|
|||||||
}
|
}
|
||||||
ipnum += y << ((3 - i) * 8);
|
ipnum += y << ((3 - i) * 8);
|
||||||
}
|
}
|
||||||
//Console.WriteLine(ipnum);
|
|
||||||
return ipnum;
|
return ipnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string lookupCountryCode(IPAddress addr)
|
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)
|
public string lookupCountryName(string str)
|
||||||
@ -111,33 +103,24 @@ namespace CountryLookupProj
|
|||||||
}
|
}
|
||||||
catch (FormatException)
|
catch (FormatException)
|
||||||
{
|
{
|
||||||
return "N/A";
|
return "An Unknown Country";
|
||||||
}
|
}
|
||||||
return lookupCountryName(addr);
|
return lookupCountryName(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string lookupCountryName(IPAddress 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];
|
byte[] buf = new byte[6];
|
||||||
long[] x = new long[2];
|
long[] x = new long[2];
|
||||||
if (depth == 0)
|
|
||||||
{
|
fileInput.Seek(6 * offset, 0);
|
||||||
Console.WriteLine("Error seeking country.");
|
fileInput.Read(buf, 0, 6);
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
fileInput.Seek(6 * offset, 0);
|
|
||||||
fileInput.Read(buf, 0, 6);
|
|
||||||
}
|
|
||||||
catch (IOException)
|
|
||||||
{
|
|
||||||
Console.WriteLine("IO Exception");
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 2; i++)
|
for (int i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
x[i] = 0;
|
x[i] = 0;
|
||||||
@ -158,7 +141,7 @@ namespace CountryLookupProj
|
|||||||
{
|
{
|
||||||
return x[1] - COUNTRY_BEGIN;
|
return x[1] - COUNTRY_BEGIN;
|
||||||
}
|
}
|
||||||
return seekCountry(x[1], ipnum, depth - 1);
|
return SeekCountry(x[1], ipnum, depth - 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -166,7 +149,7 @@ namespace CountryLookupProj
|
|||||||
{
|
{
|
||||||
return x[0] - COUNTRY_BEGIN;
|
return x[0] - COUNTRY_BEGIN;
|
||||||
}
|
}
|
||||||
return seekCountry(x[0], ipnum, depth - 1);
|
return SeekCountry(x[0], ipnum, depth - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,8 +60,17 @@ namespace Welcome_Plugin
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CountryLookupProj.CountryLookup CLT = new CountryLookupProj.CountryLookup("Plugins/GeoIP.dat");
|
try
|
||||||
await E.Owner.Broadcast($"^5{newPlayer.Name} ^7hails from ^5{CLT.lookupCountryName(newPlayer.IP)}");
|
{
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user