Exemple #1
0
        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));
        }
Exemple #2
0
        public ActionResult PluginInstalled(string AssemblyName)
        {
            IPluginDetails details = TempData["PluginDetails"] as IPluginDetails;

            ViewData["AssemblyName"] = AssemblyName;

            ViewData["PluginName"] = details.Name;

            return(View());
        }
Exemple #3
0
        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());
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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());
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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}");
        }
Exemple #9
0
        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}");
        }
Exemple #10
0
        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 }));
            }
        }