in Mail2Bug/Main.cs [23:100]
public static void Main(string[] args) // string[] args
{
if(args.Contains("-break"))
{
Logger.Info("Breaking into debugger");
Debugger.Break();
}
try
{
string configPath = ConfigurationManager.AppSettings["ConfigPath"];
string configsFilePattern = ConfigurationManager.AppSettings["ConfigFilePattern"];
var configFiles = Directory.GetFiles(configPath, configsFilePattern);
if (configFiles.Length == 0)
{
Logger.ErrorFormat("No configs found (path='{0}', pattern='{1}')", configPath, configsFilePattern);
throw new ConfigurationErrorsException("No configs found");
}
var configs = new List<Config>();
var configTimeStamps = new Dictionary<string, DateTime>();
foreach (var configFile in configFiles)
{
// Save the timestamp for the config so that we can detect if it changed later on
configTimeStamps[configFile] = File.GetLastWriteTime(configFile);
// Load the config and add it to the list.
// If loading failed, print error message and continue
var cfg = TryLoadConfig(configFile);
if (cfg == null)
{
Logger.ErrorFormat("Couldn't load config file {0}. Skipping that config file.", configFile);
continue;
}
configs.Add(cfg);
}
if (configs.Count == 0)
{
throw new ConfigurationErrorsException("None of the configs were valid");
}
InitInstances(configs);
var iterations = ReadIntFromAppConfig("Iterations", 200);
var interval = TimeSpan.FromSeconds(ReadIntFromAppConfig("IntervalInSeconds", 1));
var useThreads = ReadBoolFromAppConfig("UseThreads", false);
for (var i = 0; i < iterations; ++i )
{
Logger.InfoFormat("{0} Iteration {1} {0}", new string('-', 15), i);
RunInstances(useThreads);
if (IsConfigsChanged(configTimeStamps))
{
break;
}
Thread.CurrentThread.Join(interval); // Sleep between iterations
}
foreach (var instance in _instances)
{
var disposable = instance as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}
catch (Exception exception)
{
Logger.ErrorFormat("Exception caught in main - aborting. {0}", exception);
}
}