コード例 #1
0
        public bool Initialize()
        {
            var logConfig = new LoggingConfiguration();

            logConfig.AddTarget(new ConsoleTarget("console")
            {
                DetectConsoleAvailable = true,
                Layout = Layout.FromString("${time}: ${message}")
            });
            logConfig.AddRuleForAllLevels("console");
            LogManager.Configuration = logConfig;

            Logger.Info($"{new string('=', 64)}");
            Logger.Info("Initializing...");
            var pluginAssemblies = Directory.GetFiles($@"{AppDomain.CurrentDomain.BaseDirectory}\Plugins", "*.dll", SearchOption.AllDirectories)
                                   .Where(f => AppDomain.CurrentDomain.GetAssemblies().All(a => a.Location != f))
                                   .TrySelect(Assembly.LoadFile, ex => { })
                                   .ToList();

            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
                                                       pluginAssemblies.FirstOrDefault(a => string.CompareOrdinal(a.FullName, args.Name) == 0);

            Logger.Info("Loading plugins...");
            foreach (var assembly in pluginAssemblies)
            {
                Logger.Info("Loading assembly: {0} [{1}]", assembly.GetName().Name, assembly.GetName().Version);
            }

            _cache         = new DataCache();
            _configManager = new ConfigManager("config.json");
            _configManager.LoadOrCreateConfig();

            _sensorManager = new SensorManager();

            var alpha           = Math.Exp(-_configManager.CurrentConfig.TemperatureTimerInterval / (double)_configManager.CurrentConfig.DeviceSpeedTimerInterval);
            var providerFactory = new MovingAverageTemperatureProviderFactory(alpha);

            _temperatureManager = new TemperatureManager(_sensorManager.TemperatureSensors.ToList(), providerFactory);

            _effectManager          = new EffectManager();
            _speedControllerManager = new SpeedControllerManager();
            _deviceManager          = new DeviceManager();
            _deviceManager.Accept(_cache.AsWriteOnly());

            Logger.Info("Applying config...");
            _configManager.Accept(_cache.AsWriteOnly());
            foreach (var profile in _configManager.CurrentConfig.Profiles)
            {
                foreach (var effect in profile.Effects)
                {
                    _effectManager.Add(profile.Guid, effect);
                }

                foreach (var speedController in profile.SpeedControllers)
                {
                    _speedControllerManager.Add(profile.Guid, speedController);
                }

                _temperatureManager.EnableSensors(_speedControllerManager.GetSpeedControllers(profile.Guid)?.SelectMany(c => c.UsedSensors));
                _temperatureManager.EnableSensors(_effectManager.GetEffects(profile.Guid)?.SelectMany(e => e.UsedSensors));
            }

            ApplyComputerStateProfile(ComputerStateType.Boot);

            _timerManager = new TimerManager();
            _timerManager.RegisterTimer(_configManager.CurrentConfig.TemperatureTimerInterval, TemperatureTimerCallback);
            _timerManager.RegisterTimer(_configManager.CurrentConfig.DeviceSpeedTimerInterval, DeviceSpeedTimerCallback);
            _timerManager.RegisterTimer(_configManager.CurrentConfig.DeviceRgbTimerInterval, DeviceRgbTimerCallback);
            if (Environment.UserInteractive)
            {
                _timerManager.RegisterTimer(_configManager.CurrentConfig.LoggingTimerInterval, LoggingTimerCallback);
            }

            _timerManager.Start();

            Logger.Info("Initializing done!");
            Logger.Info($"{new string('=', 64)}");
            return(true);
        }
コード例 #2
0
 private bool TemperatureTimerCallback()
 {
     _temperatureManager.Update();
     _temperatureManager.Accept(_cache.AsWriteOnly());
     return(true);
 }
コード例 #3
0
 private bool SensorTimerCallback()
 {
     _sensorManager.Update();
     _sensorManager.Accept(_cache.AsWriteOnly());
     return(true);
 }
コード例 #4
0
        public bool Initialize()
        {
            Logger.Info($"{new string('=', 64)}");
            Logger.Info("Initializing...");
            PluginLoader.LoadAll(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"));

            const string key = "config-file";

            if (string.IsNullOrEmpty(AppSettingsHelper.ReadValue(key)))
            {
                AppSettingsHelper.WriteValue(key, "config.json");
            }

            _configManager = new ConfigManager(AppSettingsHelper.ReadValue(key));
            if (!_configManager.LoadOrCreateConfig())
            {
                return(false);
            }

            _config      = _configManager.CurrentConfig;
            _cache       = new DataCache();
            _pluginStore = new PluginStore();

            _sensorManager = new SensorManager(_config);
            _deviceManager = new DeviceManager();

            _sensorManager.EnableSensors(_config.SensorConfigs.SelectMany(x => x.Sensors));
            foreach (var profile in _config.Profiles)
            {
                if (_pluginStore.Get(profile).Any())
                {
                    Logger.Fatal("Duplicate profile \"{0}\" found!", profile.Name);
                    return(false);
                }

                foreach (var effect in profile.Effects)
                {
                    _pluginStore.Add(profile, effect);
                    _sensorManager.EnableSensors(effect.UsedSensors);
                }

                foreach (var speedController in profile.SpeedControllers)
                {
                    _pluginStore.Add(profile, speedController);
                    _sensorManager.EnableSensors(speedController.UsedSensors);
                }

                profile.Ports.RemoveAll(p =>
                {
                    var portExists = _deviceManager.Controllers.SelectMany(c => c.Ports).Contains(p);
                    if (!portExists)
                    {
                        Logger.Warn("Removing invalid port: {0}", p);
                    }

                    return(!portExists);
                });
            }

            foreach (var sensor in _sensorManager.EnabledSensors)
            {
                _cache.StoreSensorConfig(sensor, SensorConfig.Default);
            }

            foreach (var controller in _deviceManager.Controllers)
            {
                foreach (var port in controller.Ports)
                {
                    _cache.StorePortConfig(port, PortConfig.Default);
                    _cache.StoreDeviceConfig(port, DeviceConfig.Default);
                }
            }

            _configManager.Accept(_cache.AsWriteOnly());

            ApplyComputerStateProfile(ComputerStateType.Boot);

            _timerManager = new TimerManager();
            _timerManager.RegisterTimer(_config.SensorTimerInterval, SensorTimerCallback);
            _timerManager.RegisterTimer(_config.DeviceSpeedTimerInterval, DeviceSpeedTimerCallback);
            _timerManager.RegisterTimer(_config.DeviceRgbTimerInterval, DeviceRgbTimerCallback);
            if (LogManager.Configuration.LoggingRules.Any(r => r.IsLoggingEnabledForLevel(LogLevel.Debug)))
            {
                _timerManager.RegisterTimer(_config.LoggingTimerInterval, LoggingTimerCallback);
            }

            _timerManager.Start();

            Logger.Info("Initializing done!");
            Logger.Info($"{new string('=', 64)}");
            return(true);
        }
コード例 #5
0
ファイル: TTService.cs プロジェクト: djh816/TTController
        public bool Initialize()
        {
            Logger.Info($"{new string('=', 64)}");
            Logger.Info("Initializing service, version \"{0}\"", FileVersionInfo.GetVersionInfo(Assembly.GetCallingAssembly().Location)?.ProductVersion);
            PluginLoader.LoadAll(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"));

            var serializationContext = new TrackingSerializationContext();

            serializationContext.Track(typeof(IPlugin));
            serializationContext.Track(typeof(Identifier));

            _configManager = new ConfigManager("config.json", serializationContext);
            if (!_configManager.LoadOrCreateConfig())
            {
                return(false);
            }

            _config      = _configManager.CurrentConfig;
            _cache       = new DataCache();
            _pluginStore = new PluginStore(serializationContext.Get <IPlugin>());

            _sensorManager = new SensorManager(_config);
            _deviceManager = new DeviceManager();

            _sensorManager.EnableSensors(_config.SensorConfigs.SelectMany(x => x.Sensors));
            foreach (var profile in _config.Profiles)
            {
                Logger.Info("Processing profile \"{0}\"", profile.Name);
                if (_pluginStore.Get(profile).Any())
                {
                    Logger.Fatal("Duplicate profile \"{0}\" found!", profile.Name);
                    return(false);
                }

                foreach (var effect in profile.Effects)
                {
                    _pluginStore.Assign(effect, profile);
                }

                foreach (var speedController in profile.SpeedControllers)
                {
                    _pluginStore.Assign(speedController, profile);
                }

                foreach (var port in profile.Ports)
                {
                    _cache.StorePortConfig(port, PortConfig.Default);
                    _cache.StoreDeviceConfig(port, DeviceConfig.Default);

                    if (!_deviceManager.Controllers.SelectMany(c => c.Ports).Contains(port))
                    {
                        Logger.Warn("Could not find matching controller for port {0}!", port);
                    }
                }
            }

            _sensorManager.EnableSensors(serializationContext.Get <Identifier>());
            foreach (var sensor in _sensorManager.EnabledSensors)
            {
                _cache.StoreSensorConfig(sensor, SensorConfig.Default);
            }

            foreach (var controller in _deviceManager.Controllers)
            {
                foreach (var port in controller.Ports)
                {
                    _cache.StorePortConfig(port, PortConfig.Default);
                    _cache.StoreDeviceConfig(port, DeviceConfig.Default);
                }
            }

            _configManager.Accept(_cache.AsWriteOnly());

            if (_config.IpcServerEnabled && _config.IpcServer != null)
            {
                _ipcClient = new ServiceIpcClient();
                _pluginStore.Add(_ipcClient);
                _config.IpcServer.RegisterClient(_ipcClient);

                foreach (var plugin in serializationContext.Get <IIpcClient>())
                {
                    _config.IpcServer.RegisterClient(plugin);
                }
                _config.IpcServer.Start();
            }

            ApplyComputerStateProfile(ComputerStateType.Boot);

            _timerManager = new TimerManager();
            _timerManager.RegisterTimer(_config.SensorTimerInterval, SensorTimerCallback);
            _timerManager.RegisterTimer(_config.DeviceSpeedTimerInterval, DeviceSpeedTimerCallback);
            _timerManager.RegisterTimer(_config.DeviceRgbTimerInterval, DeviceRgbTimerCallback);

            if (_config.IpcClientTimerInterval > 0)
            {
                _timerManager.RegisterTimer(_config.IpcClientTimerInterval, IpcClientTimerCallback);
            }
            if (LogManager.Configuration.LoggingRules.Any(r => r.IsLoggingEnabledForLevel(LogLevel.Debug)))
            {
                _timerManager.RegisterTimer(_config.DebugTimerInterval, DebugTimerCallback);
            }

            _timerManager.Start();

            Logger.Info("Initializing done!");
            Logger.Info($"{new string('=', 64)}");
            return(true);
        }