123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- namespace MinicsConsole;
- class HostLifetime(
- HardwareFileLoader hardwareFileLoader,
- ConfigFileLoader configFileLoader,
- AddressFileLoader addressFileLoader,
- HardWareMonitor hardWareMonitor,
- ConfigUpdater configUpdater,
- BasicInfo basicInfo,
- OrmCollections ormCollections,
- DataBaseCleaner dataBaseCleaner,
- UISender uiNotifier,
- RTNotifier rtNotifer,
- PLCNotifier plcNotifier,
- KanbanNotifier kanbanNotifier,
- Mini8DataDispatcher dataDispatcher,
- DailyRoutinHelper dailyRoutinHelper,
- ITlvProvider tlvProvider,
- ILog log) : IHostedService
- {
- //Do all Module Initializations here
- async Task IHostedService.StartAsync(CancellationToken cancellationToken)
- {
- log.Initialize("General");
- hardwareFileLoader.Load();
- configFileLoader.Load();
- addressFileLoader.Load();
- addressFileLoader.LoadPLC();
- //Perparing for data receiver
- if (!plcNotifier.StartService())
- {
- log.Fatal($"PLC configFile Not Exist");
- Environment.Exit(0);
- }
- dataDispatcher.TryAddNotifier("PLC", plcNotifier);
- dataDispatcher.TryAddNotifier("UI", uiNotifier);
- //Start RT Server
- if (string.IsNullOrEmpty(basicInfo.RTServerAddress) ||
- !rtNotifer.Initialize(tlvProvider) ||
- !rtNotifer.Open(basicInfo.RTServerAddress, basicInfo.RTServerPort))
- {
- log.Fatal($"Open RT Server {basicInfo.RTServerAddress}:{basicInfo.RTServerPort} Failed");
- Environment.Exit(0);
- }
- dataDispatcher.TryAddNotifier("RT", rtNotifer);
- dataDispatcher.TryAddNotifier("Kanban", kanbanNotifier);
- //Connect to DataBase Server
- ormCollections.MainORM = new SqlSugarCustom();
- if (string.IsNullOrEmpty(basicInfo.DBConnectionString) ||
- !ormCollections.MainORM.Initialize() ||
- !ormCollections.MainORM.Open(basicInfo.DBConnectionString, DbType.PostgreSQL))
- {
- log.Fatal($"Connect DB Failed");
- Environment.Exit(0);
- }
- log.Info($"Start RT Server {basicInfo.RTServerAddress}:{basicInfo.RTServerPort} success");
- //Connect to Mini8s
- if (!hardWareMonitor.ParallelCreateConnections())
- log.Warning($"Mini8 Addresses error Unable to connect to mini8s");
- //Read Realtime data from mini8 & Read ChannelMode from hareware configruation
- if (configUpdater.ReadConfigFromMini8(out TemperatureConfig? temperatureConfig) && temperatureConfig is not null)
- configUpdater.SetConfigFile(temperatureConfig, false, out _);
- //Start Collecting Mini8s Realtime Data
- hardWareMonitor.ParallelStartDataCollecion();
- dailyRoutinHelper.AddorUpdateRoutinWork("CleanDataBase", dataBaseCleaner.CleanDB);
- dailyRoutinHelper.AddorUpdateRoutinWork("CleanLogFile", ((LogSender)log).CleanLog);
- dailyRoutinHelper.StartService(TimeSpan.FromDays(1));
- await Task.CompletedTask;
- }
- private AutoResetEvent _AutoResetEvent = new(true);
- async Task IHostedService.StopAsync(CancellationToken cancellationToken)
- {
- if (!_AutoResetEvent.WaitOne(0))
- await Task.CompletedTask;
- log.Info("Minics Console has been shutted down by UI request");
- log.Info("Saving setting files..");
- hardwareFileLoader.Save();
- configFileLoader.Save();
- addressFileLoader.Save();
- BaseConfigFileLoader.Save(basicInfo);
- log.Info("Closing all mini8 connections..");
- hardWareMonitor.CloseConnections();
- log.Info("Closing RT server connections..");
- rtNotifer?.Dispose();
- log.Info("Closing PLC connections..");
- plcNotifier?.Dispose();
- log.Info("Closing Database connections..");
- ormCollections?.MainORM?.Dispose();
- dailyRoutinHelper?.Dispose();
- log.Info("Finish Stopping..");
- log.Dispose();
- await Task.CompletedTask;
- }
- }
|