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 StartWork() { return doWorkProcess(base.CurrentProcessProgress); } private List doWorkProcess(ProcessProgress pp) { var MetersToProcess = MeterStateCtls.Where(e => e.IsEnabled).ToList(); var listOfProcessTask = new List(); foreach (var meterctl in MetersToProcess) { listOfProcessTask.Add(new Task(() => { 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; } } }