private void HandleReloadBoth() { //Check if the periodic input value changed, and enable/disable the routine if we should long periodicEnabled = DataHelper.GetSettingInt(SettingsConstants.PERIODIC_INPUT_ENABLED, 0L); if (periodicEnabled == 0) { RoutineHandler.FindRoutine(RoutineConstants.PERIODIC_INPUT_ROUTINE_ID, out int rIndex); //Remove the routine if it exists if (rIndex >= 0) { RoutineHandler.RemoveRoutine(rIndex); } } else { RoutineHandler.FindRoutine(RoutineConstants.PERIODIC_INPUT_ROUTINE_ID, out int rIndex); //Add the routine if it doesn't exist if (rIndex < 0) { RoutineHandler.AddRoutine(new PeriodicInputRoutine()); } } //Check if the virtual controller type was changed if (LastVControllerTypeChanged() == true) { VirtualControllerTypes lastVControllerType = (VirtualControllerTypes)DataHelper.GetSettingInt(SettingsConstants.LAST_VCONTROLLER_TYPE, 0L); VirtualControllerTypes supportedVCType = VControllerHelper.ValidateVirtualControllerType(lastVControllerType, TRBotOSPlatform.CurrentOS); //Show a message saying the previous value wasn't supported if (VControllerHelper.IsVControllerSupported(lastVControllerType, TRBotOSPlatform.CurrentOS) == false) { MsgHandler.QueueMessage($"Current virtual controller {lastVControllerType} is not supported by the {TRBotOSPlatform.CurrentOS} platform. Switched it to the default of {supportedVCType} for this platform."); using (BotDBContext context = DatabaseManager.OpenContext()) { Settings lastVControllerSetting = DataHelper.GetSettingNoOpen(SettingsConstants.LAST_VCONTROLLER_TYPE, context); lastVControllerSetting.ValueInt = (long)supportedVCType; context.SaveChanges(); } } ChangeVControllerType(supportedVCType); return; } ReinitVControllerCount(); }
private void HandleReloadBoth() { //Check for changes in the log level Serilog.Events.LogEventLevel logLevel = (Serilog.Events.LogEventLevel)DataHelper.GetSettingInt(SettingsConstants.LOG_LEVEL, (long)Serilog.Events.LogEventLevel.Information); if (logLevel != TRBotLogger.MinLoggingLevel) { TRBotLogger.Logger.Information($"Detected change in logging level - changing the logging level from {TRBotLogger.MinLoggingLevel} to {logLevel}"); TRBotLogger.SetLogLevel(logLevel); } //Check if the periodic input value changed, and enable/disable the routine if we should long periodicEnabled = DataHelper.GetSettingInt(SettingsConstants.PERIODIC_INPUT_ENABLED, 0L); if (periodicEnabled == 0) { RoutineHandler.FindRoutine(RoutineConstants.PERIODIC_INPUT_ROUTINE_ID, out int rIndex); //Remove the routine if it exists if (rIndex >= 0) { RoutineHandler.RemoveRoutine(rIndex); } } else { RoutineHandler.FindRoutine(RoutineConstants.PERIODIC_INPUT_ROUTINE_ID, out int rIndex); //Add the routine if it doesn't exist if (rIndex < 0) { RoutineHandler.AddRoutine(new PeriodicInputRoutine()); } } //Check if the virtual controller type was changed if (LastVControllerTypeChanged() == true) { VirtualControllerTypes lastVControllerType = (VirtualControllerTypes)DataHelper.GetSettingInt(SettingsConstants.LAST_VCONTROLLER_TYPE, 0L); VirtualControllerTypes supportedVCType = VControllerHelper.ValidateVirtualControllerType(lastVControllerType, TRBotOSPlatform.CurrentOS); //Show a message saying the previous value wasn't supported if (VControllerHelper.IsVControllerSupported(lastVControllerType, TRBotOSPlatform.CurrentOS) == false) { MsgHandler.QueueMessage($"Current virtual controller {lastVControllerType} is not supported by the {TRBotOSPlatform.CurrentOS} platform. Switched it to the default of {supportedVCType} for this platform."); using (BotDBContext context = DatabaseManager.OpenContext()) { Settings lastVControllerSetting = DataHelper.GetSettingNoOpen(SettingsConstants.LAST_VCONTROLLER_TYPE, context); lastVControllerSetting.ValueInt = (long)supportedVCType; context.SaveChanges(); } } ChangeVControllerType(supportedVCType); } else { ReinitVControllerCount(); } //Handle message throttling changes MessageThrottlingOptions msgThrottle = (MessageThrottlingOptions)DataHelper.GetSettingInt(SettingsConstants.MESSAGE_THROTTLE_TYPE, 0L); long msgTime = DataHelper.GetSettingInt(SettingsConstants.MESSAGE_COOLDOWN, 30000L); long msgThrottleCount = DataHelper.GetSettingInt(SettingsConstants.MESSAGE_THROTTLE_COUNT, 20L); if (msgThrottle != MsgHandler.CurThrottleOption) { TRBotLogger.Logger.Information("Detected change in message throttling type - changing message throttler."); } MsgHandler.SetMessageThrottling(msgThrottle, new MessageThrottleData(msgTime, msgThrottleCount)); }
public void Initialize() { if (Initialized == true) { return; } //Use invariant culture Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; //Set up the logger string logPath = Path.Combine(LoggingConstants.LogFolderPath, LoggingConstants.LOG_FILE_NAME); if (Utilities.FileHelpers.ValidatePathForFile(logPath) == false) { Console.WriteLine("Logger path cannot be validated. This is a problem! Double check the path is correct."); } //Set up the logger //Cap the size at 10 MB TRBotLogger.SetupLogger(logPath, Serilog.Events.LogEventLevel.Verbose, Serilog.RollingInterval.Day, 1024L * 1024L * 10L, TimeSpan.FromSeconds(60d)); //Initialize database string databasePath = Path.Combine(DataConstants.DataFolderPath, DataConstants.DATABASE_FILE_NAME); TRBotLogger.Logger.Information($"Validating database at: {databasePath}"); if (Utilities.FileHelpers.ValidatePathForFile(databasePath) == false) { TRBotLogger.Logger.Error($"Cannot create database path at {databasePath}. Check if you have permission to write to this directory. Aborting."); return; } TRBotLogger.Logger.Information("Database path validated! Initializing database and importing migrations."); DatabaseManager.SetDatabasePath(databasePath); DatabaseManager.InitAndMigrateContext(); TRBotLogger.Logger.Information("Checking to initialize default values for missing database entries."); //Check for and initialize default values if the database was newly created or needs updating int addedDefaultEntries = DataHelper.InitDefaultData(); if (addedDefaultEntries > 0) { TRBotLogger.Logger.Information($"Added {addedDefaultEntries} additional entries to the database."); } //Set the logger's log level long logLevel = DataHelper.GetSettingInt(SettingsConstants.LOG_LEVEL, (long)Serilog.Events.LogEventLevel.Information); TRBotLogger.SetLogLevel((Serilog.Events.LogEventLevel)logLevel); TRBotLogger.Logger.Information("Initializing client service"); //Initialize client service InitClientService(); //If the client service doesn't exist, we can't continue if (ClientService == null) { TRBotLogger.Logger.Error("Client service failed to initialize; please check your settings. Aborting."); return; } //Set client service and message cooldown MsgHandler.SetClientService(ClientService); MessageThrottlingOptions msgThrottleOption = (MessageThrottlingOptions)DataHelper.GetSettingInt(SettingsConstants.MESSAGE_THROTTLE_TYPE, 0L); long msgCooldown = DataHelper.GetSettingInt(SettingsConstants.MESSAGE_COOLDOWN, 30000L); long msgThrottleCount = DataHelper.GetSettingInt(SettingsConstants.MESSAGE_THROTTLE_COUNT, 20L); MsgHandler.SetMessageThrottling(msgThrottleOption, new MessageThrottleData(msgCooldown, msgThrottleCount)); //Subscribe to events UnsubscribeEvents(); SubscribeEvents(); DataContainer.SetMessageHandler(MsgHandler); DataContainer.SetDataReloader(DataReloader); TRBotLogger.Logger.Information("Setting up virtual controller manager."); VirtualControllerTypes lastVControllerType = (VirtualControllerTypes)DataHelper.GetSettingInt(SettingsConstants.LAST_VCONTROLLER_TYPE, 0L); VirtualControllerTypes curVControllerType = VControllerHelper.ValidateVirtualControllerType(lastVControllerType, TRBotOSPlatform.CurrentOS); //Show a message saying the previous value wasn't supported and save the changes if (VControllerHelper.IsVControllerSupported(lastVControllerType, TRBotOSPlatform.CurrentOS) == false) { MsgHandler.QueueMessage($"Current virtual controller {lastVControllerType} is not supported by the {TRBotOSPlatform.CurrentOS} platform. Switched it to the default of {curVControllerType} for this platform."); using (BotDBContext context = DatabaseManager.OpenContext()) { Settings lastVControllerSetting = DataHelper.GetSettingNoOpen(SettingsConstants.LAST_VCONTROLLER_TYPE, context); lastVControllerSetting.ValueInt = (long)curVControllerType; context.SaveChanges(); } } DataContainer.SetCurVControllerType(curVControllerType); IVirtualControllerManager controllerMngr = VControllerHelper.GetVControllerMngrForType(curVControllerType); DataContainer.SetControllerManager(controllerMngr); int controllerCount = 0; //Clamp the controller count to the min and max allowed by the virtual controller manager using (BotDBContext context = DatabaseManager.OpenContext()) { Settings joystickCountSetting = DataHelper.GetSettingNoOpen(SettingsConstants.JOYSTICK_COUNT, context); int minCount = DataContainer.ControllerMngr.MinControllers; int maxCount = DataContainer.ControllerMngr.MaxControllers; //Validate controller count if (joystickCountSetting.ValueInt < minCount) { MsgHandler.QueueMessage($"Controller count of {joystickCountSetting.ValueInt} in database is invalid. Clamping to the min of {minCount}."); joystickCountSetting.ValueInt = minCount; context.SaveChanges(); } else if (joystickCountSetting.ValueInt > maxCount) { MsgHandler.QueueMessage($"Controller count of {joystickCountSetting.ValueInt} in database is invalid. Clamping to the max of {maxCount}."); joystickCountSetting.ValueInt = maxCount; context.SaveChanges(); } controllerCount = (int)joystickCountSetting.ValueInt; } DataContainer.ControllerMngr.Initialize(); int acquiredCount = DataContainer.ControllerMngr.InitControllers(controllerCount); TRBotLogger.Logger.Information($"Setting up virtual controller {curVControllerType} and acquired {acquiredCount} controllers!"); CmdHandler = new CommandHandler(); CmdHandler.Initialize(DataContainer, RoutineHandler); DataReloader.SoftDataReloadedEvent -= OnSoftReload; DataReloader.SoftDataReloadedEvent += OnSoftReload; DataReloader.HardDataReloadedEvent -= OnHardReload; DataReloader.HardDataReloadedEvent += OnHardReload; //Initialize routines InitRoutines(); //Cache our parser InputParser = new Parser(); Initialized = true; }