From 38c8f8105147adf1a246226bf96b977af66a6b58 Mon Sep 17 00:00:00 2001 From: RaidMax Date: Sat, 22 Aug 2015 11:41:14 -0500 Subject: [PATCH] Plugins loaded dynamically, some more bug fixes --- Admin/Command.cs | 12 +++--- Admin/Plugins.cs | 50 +++++++++++++++++++++---- Admin/Server.cs | 3 +- Admin/lib/SharedLibary.dll | Bin 38400 -> 38912 bytes Admin/plugins/SamplePlugin.dll | Bin 7680 -> 7680 bytes Admin/plugins/WebfrontPlugin.dll | Bin 25600 -> 25600 bytes Release Build/lib/SharedLibary.dll | Bin 38400 -> 38912 bytes Release Build/plugins/SamplePlugin.dll | Bin 7680 -> 7680 bytes SamplePlugin/Main.cs | 5 +++ SharedLibary/Player.cs | 8 ++-- SharedLibary/Plugin.cs | 1 + Webfront Plugin/Main.cs | 9 ++++- 12 files changed, 69 insertions(+), 19 deletions(-) diff --git a/Admin/Command.cs b/Admin/Command.cs index e6cf9c71a..d7a74219a 100644 --- a/Admin/Command.cs +++ b/Admin/Command.cs @@ -189,22 +189,24 @@ namespace IW4MAdmin else { int count = 0; - String _commands = String.Empty; + StringBuilder helpResponse = new StringBuilder(); + List test = E.Owner.getCommands(); - foreach (Command C in E.Owner.getCommands()) + foreach (Command C in test) { if (E.Origin.Level >= C.Permission) { - _commands = _commands + " [^3" + C.Name + "^7] "; + helpResponse.Append(" [^3" + C.Name + "^7] "); if (count >= 4) { - E.Origin.Tell(_commands); - _commands = String.Empty; + E.Origin.Tell(helpResponse.ToString()); + helpResponse = new StringBuilder(); count = 0; } count++; } } + E.Origin.Tell(helpResponse.ToString()); E.Origin.Tell("Type !help to get command usage example"); } } diff --git a/Admin/Plugins.cs b/Admin/Plugins.cs index 43a7803b2..03c6a8eb9 100644 --- a/Admin/Plugins.cs +++ b/Admin/Plugins.cs @@ -8,14 +8,12 @@ namespace IW4MAdmin { public class PluginImporter { - public static List potentialCommands; - public static List potentialNotifies; + public static List potentialCommands = new List(); + public static List potentialPlugins = new List(); public static bool Load() { string[] dllFileNames = null; - potentialCommands = new List(); - potentialNotifies = new List(); if (Directory.Exists(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\plugins")) dllFileNames = Directory.GetFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\plugins", "*.dll"); @@ -35,8 +33,8 @@ namespace IW4MAdmin ICollection assemblies = new List(dllFileNames.Length); foreach (string dllFile in dllFileNames) { - AssemblyName an = AssemblyName.GetAssemblyName(dllFile); - Assembly assembly = Assembly.Load(an); + byte[] rawDLL = File.ReadAllBytes(dllFile); // because we want to update the plugin without restarting + Assembly assembly = Assembly.Load(rawDLL); assemblies.Add(assembly); } @@ -52,8 +50,21 @@ namespace IW4MAdmin { Object notifyObject = Activator.CreateInstance(assemblyType); Plugin newNotify = (Plugin)notifyObject; - potentialNotifies.Add(newNotify); - newNotify.onLoad(); + potentialPlugins.Add(newNotify); + + 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); totalLoaded++; } @@ -73,5 +84,28 @@ namespace IW4MAdmin Program.getManager().mainLog.Write("Loaded " + totalLoaded + " plugins.", Log.Level.Production); 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(); + potentialPlugins = new List(); + + } } } diff --git a/Admin/Server.cs b/Admin/Server.cs index bcf9424d0..45aa43e0f 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -428,7 +428,7 @@ namespace IW4MAdmin { Event curEvent = events.Peek(); processEvent(curEvent); - foreach (Plugin P in PluginImporter.potentialNotifies) + foreach (Plugin P in PluginImporter.potentialPlugins) { try { @@ -884,6 +884,7 @@ namespace IW4MAdmin initMaps(); initMessages(); initRules(); + PluginImporter.Unload(); PluginImporter.Load(); return true; } diff --git a/Admin/lib/SharedLibary.dll b/Admin/lib/SharedLibary.dll index ce631ff946feb019822853f668e18c1cd5de112e..9c9a72cb140bf4893852c08ee8749dac87ce1849 100644 GIT binary patch delta 5073 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 U44L=6#837JhAp_rDmz&J2hSYH-2eap diff --git a/Admin/plugins/SamplePlugin.dll b/Admin/plugins/SamplePlugin.dll index df6183d277c86d85f41a8690ef751c79ec48313c..5eb61a6df9f7554bc8325f8d7b7ee129dcd6f42b 100644 GIT binary patch delta 1049 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 K*Qcywobi7Ywr+F) diff --git a/Release Build/lib/SharedLibary.dll b/Release Build/lib/SharedLibary.dll index ce631ff946feb019822853f668e18c1cd5de112e..9c9a72cb140bf4893852c08ee8749dac87ce1849 100644 GIT binary patch delta 5073 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 U44L=6#837JhAp_rDmz&J2hSYH-2eap diff --git a/Release Build/plugins/SamplePlugin.dll b/Release Build/plugins/SamplePlugin.dll index df6183d277c86d85f41a8690ef751c79ec48313c..5eb61a6df9f7554bc8325f8d7b7ee129dcd6f42b 100644 GIT binary patch delta 1049 zcmZ9LUuYCp6vn@E@15OblB^S>N!F%G){P`;#6%MkZCYB5)ha^Fb}6+O1RqMYtX6{v ziep;THhpn>E426r(fD8~1=&0_iXs;3gR}}2Yg=inNJLQ@P|&st{pQB@!Mn`weCOOV zXU?3RyQ^zg*S?R`!r}Z-t<>gEyp_1z2CM+rt3Z>^rz%R<0;TjnpAXd7lxntbOQST{ zK?##+=LXj@UJ4%mNCV$Y0>nyXhwV{qlCZngr)0Ix$|Rf9)2Khz^D3DXo3&{3Pr#-v zCDctO3fN0JrGUb?Zjc~|B1$)v(b6PrgLi$wW#*-K0$mm&(bIGWukqgi5)?~-MQB7h|B8ToLLI{z zSxv5UTrX>=bM{fZFT`&wVen%rn%s9qw^2v$muKEM()4aPZ%_3BmwD%ZuakQZCo(aQ z6Z23rJ*u(?ugJ^vK6~aZlf`^oGrx&wZXir3i(+mF1|;HE#|gc|>F_x! z47$jNq{41eV=rkiXe)~Q!%@8*H}I3ES4xMVyyHu|4UpQlYW2l3U)!TsHS! zVXUOj6qW>aI_N!osO9w|{oSKE$;|y>WvVbx5vVx}hp%N>kvH>Latb3no+DF%-b{C< za(yay|BDZnj-I-BZtsy(D|F%H)VNH3%%lC^N<=5OKA)hYM@DN&~}95qT!aSAP|Kq~^vhR7~d(2eLqR#b+gL22TH z(|*azQ`AHGQjE|Id{KmuhG%1oI$Sx3BRO@W3ht6=mwbsAaS$oYoXE#?gS9G=+ zAFW7x7Fm(&o2@&gKppt10sJyGOUw)rB1;_>bJ@QrN>VJqU9j@lQ{ZTW$$mfr>ap-ezldD2 zxrDpG5CPuT%_czwTw_azIK|%t6uE#P-~PJe#||9c*Wfg;pKIg@)`9gC>(`z_NiRL=Zy_zkWca3ht#6!*JTKS@x zE0RPVg1ozleWF^JXl2gBHLcth?W_-I4%KQiqB+h<>G-CTvSf-h5t7TKg>&*GvrDsI zbChY~opcHbm%~(-(@LSMTXlKL3r)n5jg`nl62FB+=4bZZ*hKZrdd*$5o&7!PyJtr@ zW*pg&c;<5^HykqsKSvWfx{%SsK=`I; z#3Y`GFp4oMf_Mw3@qGLeiYa9yPr*^V%pfyPUcoo`$@fU2NjVK4^DB?x(;WGO&5R@}rWlt^URWyI3@@;$kpE{U z6)}BO%B>6j5w|Va_wc+7#Hc}Y1HV%K;M3w>M@4+SjBc}Ygl(N)ygV{sR^1qBeRX<$ zPhYen*)~!?TF*kxPz_xe=;d?Rt8S&H6Gb1SddPbD=MXwcKTFkk+FbMRxdfs!X(^