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); } }
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()); }
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)."); } } }