Plugins loaded dynamically, some more bug fixes
This commit is contained in:
parent
d42a329097
commit
38c8f81051
@ -189,22 +189,24 @@ namespace IW4MAdmin
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
String _commands = String.Empty;
|
StringBuilder helpResponse = new StringBuilder();
|
||||||
|
List<Command> test = E.Owner.getCommands();
|
||||||
|
|
||||||
foreach (Command C in E.Owner.getCommands())
|
foreach (Command C in test)
|
||||||
{
|
{
|
||||||
if (E.Origin.Level >= C.Permission)
|
if (E.Origin.Level >= C.Permission)
|
||||||
{
|
{
|
||||||
_commands = _commands + " [^3" + C.Name + "^7] ";
|
helpResponse.Append(" [^3" + C.Name + "^7] ");
|
||||||
if (count >= 4)
|
if (count >= 4)
|
||||||
{
|
{
|
||||||
E.Origin.Tell(_commands);
|
E.Origin.Tell(helpResponse.ToString());
|
||||||
_commands = String.Empty;
|
helpResponse = new StringBuilder();
|
||||||
count = 0;
|
count = 0;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
E.Origin.Tell(helpResponse.ToString());
|
||||||
E.Origin.Tell("Type !help <cmd> to get command usage example");
|
E.Origin.Tell("Type !help <cmd> to get command usage example");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,12 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
public class PluginImporter
|
public class PluginImporter
|
||||||
{
|
{
|
||||||
public static List<Command> potentialCommands;
|
public static List<Command> potentialCommands = new List<Command>();
|
||||||
public static List<Plugin> potentialNotifies;
|
public static List<Plugin> potentialPlugins = new List<Plugin>();
|
||||||
|
|
||||||
public static bool Load()
|
public static bool Load()
|
||||||
{
|
{
|
||||||
string[] dllFileNames = null;
|
string[] dllFileNames = null;
|
||||||
potentialCommands = new List<Command>();
|
|
||||||
potentialNotifies = new List<Plugin>();
|
|
||||||
|
|
||||||
if (Directory.Exists(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\plugins"))
|
if (Directory.Exists(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\plugins"))
|
||||||
dllFileNames = Directory.GetFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\plugins", "*.dll");
|
dllFileNames = Directory.GetFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\plugins", "*.dll");
|
||||||
@ -35,8 +33,8 @@ namespace IW4MAdmin
|
|||||||
ICollection<Assembly> assemblies = new List<Assembly>(dllFileNames.Length);
|
ICollection<Assembly> assemblies = new List<Assembly>(dllFileNames.Length);
|
||||||
foreach (string dllFile in dllFileNames)
|
foreach (string dllFile in dllFileNames)
|
||||||
{
|
{
|
||||||
AssemblyName an = AssemblyName.GetAssemblyName(dllFile);
|
byte[] rawDLL = File.ReadAllBytes(dllFile); // because we want to update the plugin without restarting
|
||||||
Assembly assembly = Assembly.Load(an);
|
Assembly assembly = Assembly.Load(rawDLL);
|
||||||
assemblies.Add(assembly);
|
assemblies.Add(assembly);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,8 +50,21 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
Object notifyObject = Activator.CreateInstance(assemblyType);
|
Object notifyObject = Activator.CreateInstance(assemblyType);
|
||||||
Plugin newNotify = (Plugin)notifyObject;
|
Plugin newNotify = (Plugin)notifyObject;
|
||||||
potentialNotifies.Add(newNotify);
|
potentialPlugins.Add(newNotify);
|
||||||
newNotify.onLoad();
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
newNotify.onLoad();
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception E)
|
||||||
|
{
|
||||||
|
Program.getManager().mainLog.Write("There was an error starting \"" + newNotify.Name + "\" plugin", Log.Level.Debug);
|
||||||
|
Program.getManager().mainLog.Write("Error Message: " + E.Message, Log.Level.Debug);
|
||||||
|
Program.getManager().mainLog.Write("Error Trace: " + E.StackTrace, Log.Level.Debug);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Program.getManager().mainLog.Write("Loaded plugin \"" + newNotify.Name + "\"" + " [" + newNotify.Version + "]", Log.Level.Debug);
|
Program.getManager().mainLog.Write("Loaded plugin \"" + newNotify.Name + "\"" + " [" + newNotify.Version + "]", Log.Level.Debug);
|
||||||
totalLoaded++;
|
totalLoaded++;
|
||||||
}
|
}
|
||||||
@ -73,5 +84,28 @@ namespace IW4MAdmin
|
|||||||
Program.getManager().mainLog.Write("Loaded " + totalLoaded + " plugins.", Log.Level.Production);
|
Program.getManager().mainLog.Write("Loaded " + totalLoaded + " plugins.", Log.Level.Production);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Unload()
|
||||||
|
{
|
||||||
|
foreach (Plugin P in potentialPlugins)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
P.onUnload();
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception E)
|
||||||
|
{
|
||||||
|
Program.getManager().mainLog.Write("There was an error unloading \"" + P.Name + "\" plugin", Log.Level.Debug);
|
||||||
|
Program.getManager().mainLog.Write("Error Message: " + E.Message, Log.Level.Debug);
|
||||||
|
Program.getManager().mainLog.Write("Error Trace: " + E.StackTrace, Log.Level.Debug);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
potentialCommands = new List<Command>();
|
||||||
|
potentialPlugins = new List<Plugin>();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -428,7 +428,7 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
Event curEvent = events.Peek();
|
Event curEvent = events.Peek();
|
||||||
processEvent(curEvent);
|
processEvent(curEvent);
|
||||||
foreach (Plugin P in PluginImporter.potentialNotifies)
|
foreach (Plugin P in PluginImporter.potentialPlugins)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -884,6 +884,7 @@ namespace IW4MAdmin
|
|||||||
initMaps();
|
initMaps();
|
||||||
initMessages();
|
initMessages();
|
||||||
initRules();
|
initRules();
|
||||||
|
PluginImporter.Unload();
|
||||||
PluginImporter.Load();
|
PluginImporter.Load();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -118,6 +118,11 @@ namespace SamplePlugin
|
|||||||
playerStats = new StatsDB("stats.rm");
|
playerStats = new StatsDB("stats.rm");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void onUnload()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public override string Name
|
public override string Name
|
||||||
{
|
{
|
||||||
get { return "Basic Stats"; }
|
get { return "Basic Stats"; }
|
||||||
|
@ -130,22 +130,22 @@ namespace SharedLibrary
|
|||||||
|
|
||||||
public void Kick(String Message)
|
public void Kick(String Message)
|
||||||
{
|
{
|
||||||
currentServer.Kick(Message, this);
|
lastEvent.Owner.Kick(Message, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void tempBan(String Message)
|
public void tempBan(String Message)
|
||||||
{
|
{
|
||||||
currentServer.tempBan(Message, this);
|
lastEvent.Owner.tempBan(Message, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Ban(String Message, Player Sender)
|
public void Ban(String Message, Player Sender)
|
||||||
{
|
{
|
||||||
currentServer.Ban(Message, this, Sender);
|
lastEvent.Owner.Ban(Message, this, Sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Alert()
|
public void Alert()
|
||||||
{
|
{
|
||||||
currentServer.Alert(this);
|
lastEvent.Owner.Alert(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String Name { get; private set; }
|
public String Name { get; private set; }
|
||||||
|
@ -8,6 +8,7 @@ namespace SharedLibrary
|
|||||||
public abstract class Plugin
|
public abstract class Plugin
|
||||||
{
|
{
|
||||||
public abstract void onLoad();
|
public abstract void onLoad();
|
||||||
|
public abstract void onUnload();
|
||||||
public abstract void onEvent(Event E);
|
public abstract void onEvent(Event E);
|
||||||
|
|
||||||
//for logging purposes
|
//for logging purposes
|
||||||
|
@ -7,6 +7,7 @@ namespace Webfront_Plugin
|
|||||||
public class Webfront : Plugin
|
public class Webfront : Plugin
|
||||||
{
|
{
|
||||||
private static Manager webManager;
|
private static Manager webManager;
|
||||||
|
private static Thread webManagerThread;
|
||||||
|
|
||||||
public override void onEvent(Event E)
|
public override void onEvent(Event E)
|
||||||
{
|
{
|
||||||
@ -28,12 +29,18 @@ namespace Webfront_Plugin
|
|||||||
public override void onLoad()
|
public override void onLoad()
|
||||||
{
|
{
|
||||||
webManager = new Manager();
|
webManager = new Manager();
|
||||||
Thread webManagerThread = new Thread(new ThreadStart(webManager.Init));
|
webManagerThread = new Thread(new ThreadStart(webManager.Init));
|
||||||
webManagerThread.Name = "Webfront";
|
webManagerThread.Name = "Webfront";
|
||||||
|
|
||||||
webManagerThread.Start();
|
webManagerThread.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void onUnload()
|
||||||
|
{
|
||||||
|
webManager.webScheduler.Stop();
|
||||||
|
webManagerThread.Join();
|
||||||
|
}
|
||||||
|
|
||||||
public override String Name
|
public override String Name
|
||||||
{
|
{
|
||||||
get { return "Webfront"; }
|
get { return "Webfront"; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user