public Controller() { Instance = this; IsRunning = true; // Time since startup var timer = new Stopwatch(); timer.Start(); TimeSinceStartup = () => timer.Elapsed.TotalSeconds; RootDirectory = Environment.CurrentDirectory; PluginDirectory = Path.Combine(RootDirectory, "plugins"); LogDirectory = Path.Combine(RootDirectory, "logs"); LanguageDirectory = Path.Combine(RootDirectory, "lang"); DataDirectory = Path.Combine(RootDirectory, "data"); DataTemporaryDirectory = Path.Combine(DataDirectory, "Temporary"); if (!Directory.Exists(PluginDirectory)) { Directory.CreateDirectory(PluginDirectory); } if (!Directory.Exists(LogDirectory)) { Directory.CreateDirectory(LogDirectory); } if (!Directory.Exists(LanguageDirectory)) { Directory.CreateDirectory(LanguageDirectory); } if (!Directory.Exists(DataDirectory)) { Directory.CreateDirectory(DataDirectory); } if (!Directory.Exists(DataTemporaryDirectory)) { Directory.CreateDirectory(DataTemporaryDirectory); } DataFileSystem = new DataFileSystem(DataDirectory); // Logging exceptions AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) => { Log.Exception((Exception)eventArgs.ExceptionObject); Log.Error("Exit in 5 seconds"); System.Console.Beep(1000, 1000); Thread.Sleep(5000); IsRunning = false; Environment.Exit(0); }; // File System Watchers FSWatcherPlugins = new FileSystemWatcher(PluginDirectory, "*.dll"); FSWatcherPlugins.Created += OnFileCreated; FSWatcherPlugins.Changed += OnFileChanged; FSWatcherPlugins.Deleted += OnFileDeleted; FSWatcherPlugins.Renamed += OnFileRenamed; FSWatcherPlugins.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite; FSWatcherPlugins.IncludeSubdirectories = false; FSWatcherPlugins.EnableRaisingEvents = true; GC.KeepAlive(FSWatcherPlugins); // Version setup Version = new Version(Assembly.GetExecutingAssembly()); // Initializing console ConsoleManager = new ConsoleManager(); ConsoleManager.Initialize(); // Loading core plugins Plugin.CreatePlugin(typeof(Core), string.Empty, false); // Loading other available plugins var files = Directory.GetFiles(PluginDirectory); for (var i = 0; i < files.Length; i++) { var path = files[i]; if (Path.GetExtension(path) == ".dll") { Interface.LoadAssembly(path); } } Interface.CallHook("OnInitialized"); }