private void ScanDirectory() { BotLocations.Clear(); // Disable all. foreach (var bot in Bots) { bot.Info = bot.Info.SetIsActive(true); } foreach (var dir in RootDirectory.GetDirectories().Where(d => d.Name != "bin" && d.Name != "zips")) { BotInfo info; if (BotInfo.TryCreate(dir, out info)) { var bot = Bots.GetOrCreate(info); if (!info.Inactive) { BotLocations[bot.Info] = dir; } } } }
private MethodInfo GetMainMethod(BotInfo info) { var exe = BotLocations[info].GetFiles("*.exe").FirstOrDefault(); if (exe != null) { var assembly = Assembly.LoadFile(exe.FullName); var program = assembly.GetTypes().FirstOrDefault(tp => tp.GetMethod("Main", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static) != null); if (program != null) { var main = program.GetMethod("Main", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); return main; } } return null; }
public static bool TryParse(string dir, out BotInfo info) { var match = DirectoryPattern.Match(dir ?? String.Empty); if (match.Success) { var inactive = !String.IsNullOrEmpty(match.Groups["disabled"].Value); var name = match.Groups["name"].Value; var version = String.IsNullOrEmpty(match.Groups["version"].Value) ? 0 : Int32.Parse(match.Groups["version"].Value); info = new BotInfo(name, version, inactive); return true; } else { info = default(BotInfo); return false; } }
public static bool TryCreate(DirectoryInfo dir, out BotInfo info) { return(TryParse(dir.Name, out info)); }
public static bool TryCreate(DirectoryInfo dir, out BotInfo info) { return TryParse(dir.Name, out info); }