public virtual void Initialize() { InstanceAsBase = this; Initializing = true; Version = ((AssemblyInformationalVersionAttribute)System.Reflection.Assembly.GetExecutingAssembly() .GetCustomAttributes <AssemblyInformationalVersionAttribute>().FirstOrDefault()) .InformationalVersion; /* Initialize Logger */ NLogHelper.DefineLogProfile(true, true); NLogHelper.EnableLogging(); logger = LogManager.GetCurrentClassLogger(); if (!Debugger.IsAttached) { AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; TaskScheduler.UnobservedTaskException += OnUnobservedTaskException; Contract.ContractFailed += OnContractFailed; } else { logger.Warn("Exceptions not handled cause Debugger is attatched"); } PreLoadReferences(Assembly.GetCallingAssembly()); LoadedAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToDictionary(entry => entry.GetName().Name); AppDomain.CurrentDomain.AssemblyLoad += OnAssemblyLoad; if (Environment.GetCommandLineArgs().Contains("-config")) { UpdateConfigFiles(); } ConsoleBase.DrawAsciiLogo(); Console.WriteLine(); InitializeGarbageCollector(); logger.Info("Initializing Configuration..."); /* Initialize Config File */ Config = new XmlConfig(ConfigFilePath); Config.AddAssemblies(LoadedAssemblies.Values.ToArray()); if (!File.Exists(ConfigFilePath)) { Config.Create(); logger.Info("Config file created"); } else { Config.Load(); } logger.Info("Initialize Task Pool"); IOTaskPool = new BenchmarkedTaskPool(IOTaskInterval, "IO Task Pool"); CommandManager = CommandManager.Instance; CommandManager.RegisterAll(Assembly.GetExecutingAssembly()); logger.Info("Initializing Network Interfaces..."); ClientManager = ClientManager.Instance; ClientManager.Initialize(CreateClient); if (Settings.InactivityDisconnectionTime.HasValue) { IOTaskPool.CallPeriodically(Settings.InactivityDisconnectionTime.Value / 4 * 1000, DisconnectAfkClient); } ClientManager.ClientConnected += OnClientConnected; ClientManager.ClientDisconnected += OnClientDisconnected; logger.Info("Register Plugins..."); // the plugins add them themself to the initializer InitializationManager = InitializationManager.Instance; InitializationManager.AddAssemblies(AppDomain.CurrentDomain.GetAssemblies()); PluginManager = PluginManager.Instance; PluginManager.PluginAdded += OnPluginAdded; PluginManager.PluginRemoved += OnPluginRemoved; logger.Info("Loading Plugins..."); PluginManager.Instance.LoadAllPlugins(); if (IsExceptionLoggerEnabled) { ExceptionLogger = new RavenClient(ExceptionLoggerDSN); ExceptionLogger.Release = Version; #if DEBUG ExceptionLogger.Environment = "DEBUG"; #else ExceptionLogger.Environment = "RELEASE"; #endif } }