Esempio n. 1
0
 public static Module[] LoadModule(SelectModules selectModules, bool start = false)
 {
     try
     {
         if (selectModules == SelectModules.New)
         {
             string[] files = Directory.GetFiles(@"Modules/");
             System.Collections.Concurrent.ConcurrentBag <Module> ret = new System.Collections.Concurrent.ConcurrentBag <Module>();
             Parallel.ForEach(files, (filePath) =>
             {
                 if (filePath.EndsWith(".module.dll"))
                 {
                     Parallel.ForEach(LoadModule(filePath, start), (module) =>
                     {
                         ret.Add(module);
                     });
                 }
             });
             if (ret.Count == 0)
             {
                 throw new Exception("None of the module files marked as new are refering to any modules!");
             }
             return(ret.ToArray());
         }
         else
         {
             throw new Exception("You can load only new or specified modules. You can also remove or reload them reloading them.");
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
         return(null);
     }
 }
Esempio n. 2
0
        public static string[] GetExistingModulesPath(SelectModules selectModules)
        {
            List <string> returnAble = new List <string>();

            string[] files = Directory.GetFiles(@"Modules\");
            foreach (var filePath in files)
            {
                if (filePath.EndsWith(".module.dll"))
                {
                    if (selectModules == SelectModules.All)
                    {
                        returnAble.Add(filePath);
                    }

                    else if (selectModules == SelectModules.New)
                    {
                        if (!ModuleList.Exists(x => x.Path == filePath))
                        {
                            returnAble.Add(filePath);
                        }
                    }

                    else if (selectModules == SelectModules.Started)
                    {
                        if (ModuleList.Find(x => x.Path == filePath).Status == Module.ModuleStatus.Started)
                        {
                            returnAble.Add(filePath);
                        }
                    }

                    else if (selectModules == SelectModules.Loaded)
                    {
                        if (ModuleList.Find(x => x.Path == filePath).Status == Module.ModuleStatus.Loaded)
                        {
                            returnAble.Add(filePath);
                        }
                    }

                    else if (selectModules == SelectModules.Necessery)
                    {
                        if (ModuleList.Find(x => x.Path == filePath).LastWriteTime != new FileInfo(filePath).LastWriteTime)
                        {
                            returnAble.Add(filePath);
                        }
                    }
                }
                else
                {
                    Console.WriteLine("File in path \"" + filePath + "\" has not a valid module extension (.module.dll).");
                }
            }

            return(returnAble.ToArray());
        }
Esempio n. 3
0
        public static void ReloadModule(SelectModules selectModules, bool loadNull = false)
        {
            if (selectModules == SelectModules.New)
            {
                Console.WriteLine("You can not reload new moules because they are not loaded yet. In this case try with simply load them.");
                return;
            }
            string[] files = Directory.GetFiles("Modules/");
            foreach (var filePath in files)
            {
                if (filePath.EndsWith(".module.dll"))
                {
                    var module = ModuleList.Find(x => x.Path == filePath);
                    if (selectModules == SelectModules.All)
                    {
                        if (module == null && loadNull)
                        {
                            LoadModule(filePath);
                        }
                        else
                        {
                            ReloadModule(ref module);
                        }
                    }

                    else if (selectModules == SelectModules.Necessery)
                    {
                        if (module != null && module.LastWriteTime != new FileInfo(filePath).LastWriteTime)
                        {
                            ReloadModule(ref module);
                        }
                    }

                    else if (selectModules == SelectModules.Loaded)
                    {
                        if (module.Status == Module.ModuleStatus.Loaded)
                        {
                            ReloadModule(ref module);
                        }
                        else if (module.Status == Module.ModuleStatus.Stopping)
                        {
                            while (module.Status != Module.ModuleStatus.Loaded)
                            {
                                System.Threading.Thread.Sleep(500);
                            }
                            ReloadModule(ref module);
                        }
                    }
                    else if (selectModules == SelectModules.Started)
                    {
                        if (module.Status == Module.ModuleStatus.Started)
                        {
                            ReloadModule(ref module);
                        }
                        else if (module.Status == Module.ModuleStatus.Starting)
                        {
                            while (module.Status != Module.ModuleStatus.Started)
                            {
                                System.Threading.Thread.Sleep(500);
                            }
                            ReloadModule(ref module);
                        }
                    }
                }
                else
                {
                    Console.WriteLine("File in path \"" + filePath + "\" has not a valid module extension (.module.dll).");
                }
            }
        }