98 lines
3.3 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|