Files
laatzen/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterBatch.cs
T

98 lines
3.3 KiB
C#

namespace Common.Hardware.WaterMeter.eRegister
{
using Common.Hardware.WaterMeter.eRegister.Models;
using Common.Hardware.SIRT;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
public class EregisterBatch
{
private readonly SIRTFactory sirtFactory;
private readonly ICollection<Eregister> eregisters;
public EregisterBatch(SIRTFactory broadcaster)
{
this.sirtFactory = broadcaster;
this.eregisters = new List<Eregister>();
}
public IEnumerable<IEnumerable<EregisterTask>> LoadCustomTasks(EregisterProgrammingParametersList parametersList)
{
this.eregisters.Clear();
foreach (var parameters in parametersList)
{
var features = parameters.LoadCustomFeatures();
var eregister = new Eregister(features, this.sirtFactory.EnqueueTask);
this.sirtFactory.DequeueTasks(features.RequestAddress);
this.sirtFactory.DequeueTasks(features.ResponseAddress);
this.eregisters.Add(eregister);
yield return eregister.LoadCustomTasks(parameters);
}
}
public IEnumerable<IEnumerable<EregisterTask>> LoadInspectionFinalizationTasks(EregisterProgrammingParametersList parametersList)
{
this.eregisters.Clear();
foreach (var parameters in parametersList)
{
var features = parameters.LoadInspectionFinalizationFeatures();
var eregister = new Eregister(features, this.sirtFactory.EnqueueTask);
this.sirtFactory.DequeueTasks(features.RequestAddress);
this.sirtFactory.DequeueTasks(features.ResponseAddress);
this.eregisters.Add(eregister);
yield return eregister.LoadInspectionFinalizationTasks(parameters);
}
}
public IEnumerable<IEnumerable<EregisterTask>> LoadInspectionInitializationTasks(EregisterProgrammingParametersList parametersList)
{
this.eregisters.Clear();
foreach (var parameters in parametersList)
{
var features = parameters.LoadInspectionInitializationFeatures();
var eregister = new Eregister(features, this.sirtFactory.EnqueueTask);
this.sirtFactory.DequeueTasks(features.RequestAddress);
this.sirtFactory.DequeueTasks(features.ResponseAddress);
this.eregisters.Add(eregister);
yield return eregister.LoadInspectionInitializationTasks(parameters);
}
}
public Task StartProgrammingAsync(CancellationToken cancellationToken)
{
var tasks = new List<Task>();
foreach (var eregister in this.eregisters)
{
tasks.Add(Task.Run((Action)eregister.StartProgramming, cancellationToken));
}
return Task.WhenAll(tasks);
}
public void StopProgramming()
{
foreach (var eregister in this.eregisters)
{
this.sirtFactory.DequeueTasks(eregister.Address);
eregister.Clear();
}
this.eregisters.Clear();
}
}
}