public ActionResult PluginsMenu() { List <PluginMenu> menus = new List <PluginMenu>(); string[] pluginFiles = Directory.GetFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"), "*.dll"); foreach (string plugin in pluginFiles) { Assembly loadPlugin = Assembly.LoadFrom(plugin); string name = loadPlugin.GetName().Name; Type toLoad = loadPlugin.GetType(name + ".PluginDetails"); IPluginDetails pluginDetails = Activator.CreateInstance(toLoad) as IPluginDetails; if (_pluginRepository.First(item => item.Name.Equals(pluginDetails.Name)) == null) { continue; } menus.Add(new PluginMenu { MainLink = pluginDetails.AdminMenu.ParentLink, ChildLinks = pluginDetails.AdminMenu.ChildLinks }); } return(View(menus)); }
public ActionResult PluginInstalled(string AssemblyName) { IPluginDetails details = TempData["PluginDetails"] as IPluginDetails; ViewData["AssemblyName"] = AssemblyName; ViewData["PluginName"] = details.Name; return(View()); }
public IPlugin Load(Package package, IPluginDetails pluginDetails, Type pluginType) { if (pluginDetails.Format != IdString) { throw new UnsupportedPluginFormatException($"{typeof(JodsEngineGamePluginFormat).Name} does not support plugin format {pluginDetails.Format}"); } //TODO return(new Plugin()); }
public IPluginDetails GetPluginDetailsFromAssembly(string assemblyPath) { Assembly loadPlugin = Assembly.LoadFrom(assemblyPath); string assemblyName = loadPlugin.GetName().Name; Type toLoad = loadPlugin.GetType(assemblyName + ".PluginDetails"); IPluginDetails details = Activator.CreateInstance(toLoad) as IPluginDetails; return(details); }
public ActionResult Install(string AssemblyName) { var plugins = _pluginServices.GetPluginsInFolder(Server.MapPath("~/Plugins")); IPluginDetails details = _pluginServices.GetPluginDetailsFromAssembly(Path.Combine(Server.MapPath("~/Plugins"), AssemblyName + ".dll")); ViewData["AssemblyName"] = AssemblyName; var results = TempData["InstallResults"]; ViewData["InstallResults"] = results; return(View(details)); }
public IPlugin Load(Package package, IPluginDetails pluginDetails, Type pluginType) { if (pluginDetails.Format != FormatString) { throw new UnsupportedPluginFormatException($"{typeof(JodsGameFormat).Name} does not support plugin format {pluginDetails.Format}"); } if (pluginType != typeof(JodsGamePlugin) && pluginType != typeof(Plugin)) { throw new UnsupportedPluginTypeException($"{nameof(JodsGameFormat)} does not support plugin type {pluginType.Name}"); } //TODO: This needs to create a JodsGamePlugin from a definition.xml return(new JodsGamePlugin()); }
public IPlugin Load(Package package, IPluginDetails pluginDetails, Type pluginType) { if (pluginDetails.Format != IdString) { throw new UnsupportedPluginFormatException($"{nameof(YamlPluginFormat)} does not support the format {pluginDetails.Format}"); } IPlugin plugin; using (var reader = new StreamReader(File.OpenRead(pluginDetails.Path))) { plugin = (IPlugin)_deserializer.Deserialize(reader, pluginType); } plugin.Details = pluginDetails; plugin.Initialize(package); return(plugin); }
public IPlugin Load(Package package, IPluginDetails pluginDetails, Type pluginType) { if (pluginDetails.Format != IdString) { throw new UnsupportedPluginFormatException($"{typeof(DotNetPluginFormat).Name} does not support plugin format {pluginDetails.Format}"); } var ass = package.LoadAssembly(pluginDetails.Path); var allTypes = ass.GetExportedTypes().ToArray(); var assemblyPluginTypes = allTypes .Where(x => !x.IsAbstract && !x.IsInterface) .Where(x => pluginType.IsAssignableFrom(x)) .ToArray() ; foreach (var assemblyPluginType in assemblyPluginTypes) { var pluginDetailsAttribute = assemblyPluginType.GetCustomAttribute <PluginDetailsAttribute>(); if (pluginDetailsAttribute == null) { continue; } if (pluginDetailsAttribute.Id != pluginDetails.Id) { continue; } var plugin = (IPlugin)Activator.CreateInstance(assemblyPluginType); plugin.Details = pluginDetails; plugin.Initialize(package); return(plugin); } throw new PluginNotFoundException($"Could not load find dotnet plugin {pluginDetails.Id} in {pluginDetails.Path}"); }
public IPlugin Load(Package package, IPluginDetails pluginDetails, Type pluginType) { if (pluginDetails.Format != IdString) { throw new UnsupportedPluginFormatException($"{nameof(IntegratedPluginFormat)} does not support the format {pluginDetails.Format}"); } var ass = typeof(IntegratedPluginFormat).Assembly; var types = ass .GetTypes() .Where(x => pluginType.IsAssignableFrom(x)) ; foreach (var type in types) { var pluginDetailsAttribute = type.GetCustomAttribute <PluginDetailsAttribute>(); if (pluginDetailsAttribute == null) { continue; } if (pluginDetailsAttribute.Id != pluginDetails.Id) { continue; } var plugin = (IPlugin)Activator.CreateInstance(type); plugin.Details = pluginDetails; plugin.Initialize(package); return(plugin); } throw new PluginNotFoundException($"Could not load find integrated plugin {pluginDetails.Id}"); }
public ActionResult InstallPlugin(string AssemblyName) { IPluginDetails details = _pluginServices.GetPluginDetailsFromAssembly(Path.Combine(Server.MapPath("~/Plugins"), AssemblyName + ".dll")); TempData["PluginDetails"] = details; PluginInstall results = new PluginInstall { Configs = "", SQL = "" }; if (!string.IsNullOrWhiteSpace(details.InstallDetails.GetSQL)) { try { SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["cleanConnectionString"].ConnectionString); SqlCommand cmd = sqlCon.CreateCommand(); cmd.CommandText = details.InstallDetails.GetSQL; sqlCon.Open(); cmd.ExecuteNonQuery(); sqlCon.Close(); } catch (Exception ex) { results.SQL = ex.Message; } } var configs = details.InstallDetails.GetConfigs(); if (configs != null && configs.Count > 01) { try { foreach (var config in configs) { _pluginConfigRepository.Add(new PluginConfig() { Name = config.Name, Note = config.Note, Options = config.Options, Type = config.Type, Value = config.Value, PluginGroup = details.Name }); } } catch (Exception ex) { results.Configs = ex.Message; } } if (results.Configs == "" && results.SQL == "") { _pluginRepository.Add(new Plugin { Name = details.Name, Description = details.Description, Installed = true, AssemblyName = AssemblyName }); SetSuccess("Plugin successfully installed"); return(RedirectToAction("PluginInstalled", new { AssemblyName = AssemblyName })); } else { SetError("An error occurred while installing the plugin"); TempData["InstallResults"] = results; return(RedirectToAction("Install", new { AssemblyName = AssemblyName })); } }