/// <summary>
 /// Initialisiert den Controller
 /// </summary>
 /// <param name="logger">Service für Lognachrichten</param>
 /// <param name="heaterDataService">Service für die aktuellen Heizungsdaten</param>
 /// <param name="heaterRepository">Repository für die Historiendaten der Heizung</param>
 public HeaterDataController(
     ILogger <HeaterDataController> logger,
     IHeaterDataService heaterDataService,
     IHeaterRepository heaterRepository)
 {
     this.logger            = logger;
     this.heaterDataService = heaterDataService;
     this.heaterRepository  = heaterRepository;
 }
Exemplo n.º 2
0
        /// <summary>
        /// Initialisiert die Klasse
        /// </summary>
        /// <param name="logger">Service für Lognachrichten</param>
        /// <param name="heaterRepository">Repository für die Heizungsdaten</param>
        /// <param name="heaterDataHub">Hub zum senden von Nachrichten an Clients bezüglich den Heizungsdaten</param>
        public HeaterDataService(
            ILogger <HeaterDataService> logger,
            IHeaterRepository heaterRepository,
            IHubContext <HeaterDataHub> heaterDataHub)
        {
            this.logger                   = logger;
            this.heaterRepository         = heaterRepository;
            this.heaterDataHub            = heaterDataHub;
            this.destroyFunctions         = new List <Action>();
            this.CurrentHeaterValues      = new Dictionary <int, HeaterData>();
            this.doorOpeningsSinceFireOut = new List <DoorOpening>();

            this.heaterValueDescriptionDictionaryPromise = Task.Run <IDictionary <int, ValueDescription> >(() => {
                // Das ConcurrentDictionary ist hier notwendig, da ansonsten Exceptions auftreten können bei mehreren Threads
                IDictionary <int, ValueDescription> result = new ConcurrentDictionary <int, ValueDescription>();

                var valueDescriptions = this.heaterRepository.GetAllValueDescriptions();

                foreach (var valueDescription in valueDescriptions)
                {
                    result[valueDescription.Id] = valueDescription;
                }

                return(result);
            });
            this.heaterValueDescriptionDictionaryPromise.ContinueWith((task) =>
            {
                this.FillHeaterDataDictionaryByValueDescription(this.CurrentHeaterValues, task.Result);
            });

            // Periodisches Speichern der Daten in der Datenbank machen
            var saveTimer = new Timer(
                (timerState) => {
                this.logger.LogDebug("HistoryDataTimer elapsed. Saving Historydata.");
                this.updateSinceDBSave = false;

                if (this.CurrentHeaterValues.Count > 0)
                {
                    this.heaterRepository.SetHeaterValue(this.CurrentHeaterValues);
                }
            },
                null,
                0,
                Convert.ToInt32(new TimeSpan(0, 15, 0).TotalMilliseconds));

            this.destroyFunctions.Add(() => {
                saveTimer.Dispose();
                saveTimer = null;
            });

            this.errorDictionaryPromise = Task.Run(() => {
                IDictionary <int, ErrorDescription> result = new ConcurrentDictionary <int, ErrorDescription>(this.heaterRepository.GetAllErrorDictionary());

                return(result);
            });
        }
Exemplo n.º 3
0
 /// <summary>
 /// Initialisiert den Controller
 /// </summary>
 /// <param name="logger">Service für Lognachrichten</param>
 /// <param name="heaterRepository">Repository für die Historiendaten der Heizung</param>
 public MailController(ILogger <HeaterDataController> logger, IHeaterRepository heaterRepository)
 {
     this.logger           = logger;
     this.heaterRepository = heaterRepository;
 }