common/CordonelPreadjustmentUi/Processes/ActionsSinglePath/DemoProcess.cs
2026-04-23 17:50:07 +02:00

86 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Text;
using CordonelPreadjustmentUi.Processes.Itinerary;
using System.Threading;
using static CordonelPreadjustmentUi.PreAdjustmentControl;
using System.Threading.Tasks;
namespace CordonelPreadjustmentUi.Processes.Actions
{
public class DemoProcess : BaseProcess
{
public DemoProcess(string processName, StatusPanelItems panelState, string performMessage, string failedMessage ) : base(processName, panelState, performMessage, failedMessage )
{
}
public override List<Task> StartWork()
{
return doWorkProcess(base.CurrentProcessProgress);
}
private List<Task> doWorkProcess(ProcessProgress pp)
{
var MetersToProcess = MeterStateCtls.Where(e => e.IsEnabled).ToList();
var listOfProcessTask = new List<Task>();
foreach (var meterctl in MetersToProcess)
{
listOfProcessTask.Add(new Task<bool>(() =>
{
var Result = false;
for (int i = 0; i < 3; i++)
{
pp.DebugMessage = $"\tCOMMAND CHANNEL: \t Performing {ProcessName} procedure\n";
try
{
Result = string.IsNullOrEmpty(meterctl.OverridePassword)
? meterctl.Meter.Login()
: meterctl.Meter.Login(meterctl.OverridePassword);
if (Result)
{
break;
}
Thread.Sleep(100);
}
catch (Exception e)
{
pp.DebugMessage = $"\tCOMMAND CHANNEL: \t Error on {ProcessName} procedure\n";
}
}
var meterIndex = (meterctl.Slot).ToString(pp.Setting.Culture);
meterctl.Failed = !Result;
if (!Result)
{
pp.DebugMessage = $"\tCOMMAND CHANNEL: \t {ProcessName} procedure failed at METER{meterIndex}\n";
}
else
{
pp.DebugMessage = $"\tCOMMAND CHANNEL: \t {ProcessName} procedure successful at METER{meterIndex}\n";
pp.GenerateReturnNote($"{meterctl.Slot}", meterctl.Meter.PcbId, PredefinedMessages.LoginFailed(pp.Setting.Culture));
}
return Result;
}));
}
return listOfProcessTask;
}
}
}