using CordonelPreadjustmentUi.Processes.Itinerary; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using static CordonelPreadjustmentUi.PreAdjustmentControl; namespace CordonelPreadjustmentUi.Processes.Actions { public class LoginProcess : BaseProcess { public LoginProcess(string processName, StatusPanelItems panelState, string performMessage, string failedMessage, int? expectedTimeS) : base(processName, panelState, performMessage, failedMessage, expectedTimeS) { } public override List StartWork() { return Login(base.CurrentProcessProgress); } private List Login(ProcessProgress pp) { var MetersToProcess = MeterStateCtls.Where(e => e.IsEnabled).ToList(); MetersToProcess.ForEach(lf => lf.LoginFailed = false); var listOfLoginTask = new List(); foreach (var tempmeterctl in TempMeterStateCtls) { listOfLoginTask.Add(new Task(() => { if (pp.Setting.GetTempUseTempFlansh()) { pp.DebugMessage($"Load Temp {tempmeterctl.Slot} with {MeterStateControl.TempMode.CalcTof}\n"); tempmeterctl.StartTempWatch(MeterStateControl.TempMode.CalcTof); } else { pp.DebugMessage($"Load Temp {tempmeterctl.Slot} with {MeterStateControl.TempMode.Hand}\n"); tempmeterctl.StartTempWatch(); } tempmeterctl.SetTemperature(0); tempmeterctl.DisableTemperatureinput(true); return true; })); } var delay = 1000; foreach (var meterctl in MetersToProcess) { listOfLoginTask.Add(new Task(() => { Thread.Sleep(delay * listOfLoginTask.Count); var Result = false; for (int i = 0; i < 3; i++) { pp.DebugMessage($"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($"Error on {ProcessName} procedure\n"); pp.DebugMessage($"Error {e.Message}\n"); } } if (meterctl.Meter!= null) { meterctl.Meter.SerialNumber = meterctl.Srn; meterctl.Meter.CurrentActionText = "PreAdjustment"; } var meterIndex = (meterctl.Slot).ToString(pp.Setting.Culture); meterctl.LoginFailed = !Result; meterctl.Failed = !Result; if (!Result) { pp.DebugMessage($"{ProcessName} procedure failed", meterctl.Slot, "APP", meterctl.Meter.PcbId); //pp.GenerateReturnNote(PredefinedMessages.LoginFailed(pp.Setting.Culture), meterctl); } else { pp.DebugMessage($"{ProcessName} procedure successful", meterctl.Slot, "APP", meterctl.Meter.PcbId); } Thread.Sleep(delay); return Result; })); } return listOfLoginTask; } } }