From 18856a4085d29971ca4fd965d20267cd1260f278 Mon Sep 17 00:00:00 2001 From: Thomas Wiedebusch Date: Tue, 23 Aug 2022 12:35:14 +0200 Subject: [PATCH] GenesisMeter: -ReFactor Login, Login(password), QuickLogin --- Common/.shared/SharedAssemblyInfo.cs | 4 +- .../Genesis/GenesisCore/GenesisMeter.cs | 232 ++++++------------ .../WaterMeter/WaterMeterCore/IMeter.cs | 4 +- Common/Ui/GenesisToolBox/FrmFwUpdate.cs | 2 +- 4 files changed, 84 insertions(+), 158 deletions(-) diff --git a/Common/.shared/SharedAssemblyInfo.cs b/Common/.shared/SharedAssemblyInfo.cs index d49c1556..ef476f75 100644 --- a/Common/.shared/SharedAssemblyInfo.cs +++ b/Common/.shared/SharedAssemblyInfo.cs @@ -14,5 +14,5 @@ using System.Reflection; //[assembly: AssemblyVersion("1.2.*.0")] -[assembly: AssemblyVersion("2.3.1.*")] -[assembly: AssemblyFileVersion("2.3.1.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.3.2.*")] +[assembly: AssemblyFileVersion("2.3.2.0")] \ No newline at end of file diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs index 46c7beea..42c9f3db 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs @@ -933,6 +933,80 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore return responseRecord; } + private String GetPassword() + { + var url = ServiceUrls.GenesisGetPasswordServiceUrl(); + String password; + + //without PCB ID it is not possible to login + var firstPcbId = GetPcbId(); + if (string.IsNullOrEmpty(firstPcbId) || firstPcbId.Length < 8) + { + if (firstPcbId != null && firstPcbId.Length < 8) + { + + Thread.Sleep(250); + } + if (string.IsNullOrEmpty(GetPcbId())) + { + + return ""; + } + } + + url += PcbId; + try + { + //use + var http = (HttpWebRequest)WebRequest.Create(url); + var response = (HttpWebResponse)http.GetResponse(); + var responseStream = response.GetResponseStream(); + if (responseStream == null) + { + throw new InvalidOperationException(); + } + using (var sr = new StreamReader(responseStream)) + { + var responseJson = sr.ReadToEnd(); + password = responseJson.Trim('"'); + + + } + _logger.Info($"Slot:{Slot} - Got password from GenesisPasswordServiceUrl, URL({url})"); + } + catch (Exception ex) + { + _logger.Info($"Slot:{Slot} - Cannot get password from GenesisPasswordService, " + + $"URL({url}), Error({ex.Message})"); + var listOfOfflinePasswords = JsonConvert.DeserializeObject>(File.ReadAllText(ProgramConfig.OfflineInfoFile)); + password = listOfOfflinePasswords.First(x => x.PcbId == PcbId).Password; + if (!string.IsNullOrEmpty(password)) + { + _logger.Info($"Slot:{Slot} - Got password from password file!"); + } + } + + return password; + } + + /// + /// + /// Get password from server + /// + public Boolean Login() + { + var password = GetPassword(); + return !string.IsNullOrEmpty(password) && Login(password); + } + + /// + /// Get password from server + /// + public Boolean QuickLogin() + { + var password = GetPassword(); + return !string.IsNullOrEmpty(password) && Login(password, true, true); + } /// /// Login with identical password as last time @@ -950,124 +1024,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore return string.IsNullOrEmpty(_password) ? Login() : Login(_password); } - /// - /// - /// Get password from server - /// - public Boolean Login() - { - var url = ServiceUrls.GenesisGetPasswordServiceUrl(); - String autoPassword; - - //without PCB ID it is not possible to login - var firstPcbId = GetPcbId(); - if (string.IsNullOrEmpty(firstPcbId) || firstPcbId.Count() < 8) - { - if (firstPcbId != null && firstPcbId.Count() < 8) - { - - Thread.Sleep(250); - } - if (string.IsNullOrEmpty(GetPcbId())) - { - return false; - } - } - - url += PcbId; - try - { - //use - var http = (HttpWebRequest)WebRequest.Create(url); - var response = (HttpWebResponse)http.GetResponse(); - var responseStream = response.GetResponseStream(); - if (responseStream == null) - { - throw new InvalidOperationException(); - } - using (var sr = new StreamReader(responseStream)) - { - var responseJson = sr.ReadToEnd(); - autoPassword = responseJson.Trim('"'); - - - } - _logger.Info($"Slot:{Slot} - Got password from GenesisPasswordServiceUrl, URL({url})"); - } - catch (Exception ex) - { - _logger.Info($"Slot:{Slot} - Cannot get password from GenesisPasswordService, " + - $"URL({url}), Error({ex.Message})"); - var listOfOfflinePasswords = JsonConvert.DeserializeObject>(File.ReadAllText(ProgramConfig.OfflineInfoFile)); - autoPassword = listOfOfflinePasswords.First(x => x.PcbId == PcbId).Password; - if (!string.IsNullOrEmpty(autoPassword)) - { - _logger.Info($"Slot:{Slot} - Got password from password file!"); - } - } - - return Login(autoPassword); - } - - - /// - /// Get password from server - /// - public Boolean QuickLogin() - { - var url = ServiceUrls.GenesisGetPasswordServiceUrl(); - String autoPassword; - - //without PCB ID it is not possible to login - var firstPcbId = GetPcbId(); - if (string.IsNullOrEmpty(firstPcbId) || firstPcbId.Length < 8) - { - if (firstPcbId != null && firstPcbId.Length < 8) - { - - Thread.Sleep(250); - } - if (string.IsNullOrEmpty(GetPcbId())) - { - return false; - } - } - - url += PcbId; - try - { - //use - var http = (HttpWebRequest)WebRequest.Create(url); - var response = (HttpWebResponse)http.GetResponse(); - var responseStream = response.GetResponseStream(); - if (responseStream == null) - { - throw new InvalidOperationException(); - } - using (var sr = new StreamReader(responseStream)) - { - var responseJson = sr.ReadToEnd(); - autoPassword = responseJson.Trim('"'); - - - } - _logger.Info($"Slot:{Slot} - Got password from GenesisPasswordServiceUrl, URL({url})"); - } - catch (Exception ex) - { - _logger.Info($"Slot:{Slot} - Cannot get password from GenesisPasswordService, " + - $"URL({url}), Error({ex.Message})"); - var listOfOfflinePasswords = JsonConvert.DeserializeObject>(File.ReadAllText(ProgramConfig.OfflineInfoFile)); - autoPassword = listOfOfflinePasswords.First(x => x.PcbId == PcbId).Password; - if (!string.IsNullOrEmpty(autoPassword)) - { - _logger.Info($"Slot:{Slot} - Got password from password file!"); - } - } - - return Login(autoPassword, true, true); - } - private class OfflinePasswordItem { public OfflinePasswordItem(String pcbId, String password) @@ -1079,27 +1035,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore public String PcbId { - get; private set; + get; } public String Password { - get; private set; + get; } } /// - /// - /// Starting a timer to keep session active, - /// starting the . - /// - /// password string to login - /// - public Boolean Login(String password) - { - return Login(password, true); - } - /// /// Starting a timer to keep session active, /// starting the . @@ -1115,7 +1060,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Avoid retries during login, a retry will lock the Genesis for 2s, 4s, 8s, 16s and so on. /// - private Boolean Login(String password, Boolean runImmediately, Boolean quickLogin = false) + public Boolean Login(String password, Boolean runImmediately = true, Boolean quickLogin = false) { var backupRetries = CommunicationConfig.RequestRetries; @@ -1140,9 +1085,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore _logger.Info($"Slot:{Slot} - Successful logged in to meter"); StartKeepSession(); - - - if (quickLogin) { WriteRegister(Register.Mertrologyasst.PulseMode, 0, true, true); @@ -1150,7 +1092,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore WriteRegister("SENSUSRADIO_SystemState", 1, true, true); } - if (Configuration != null && !Configuration.ProductionMode) { IsDevelopmentUsage = true; @@ -1373,23 +1314,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore _logger.Info($"Meter size: {MeterSize}"); //remove unused registers with invalid version var tempConfigRegisters = _configRegister.MeterRegisterDic.ToList(); - //tempConfigRegisters.ToList() - //var sb = new List(); - //var listoFREGISTERADRESSES = new List >(); - //foreach (var item in tempConfigRegisters) - //{ - // listoFREGISTERADRESSES.Add(new Tuple(item.Key.RegisterAddress, item.Key.GetIdent())); - //} - - - //var dicAdressName = new Dictionary(); - - //listoFREGISTERADRESSES.ForEach(a => sb.Add($"dicAdressName.Add(new byte[] {{ 0x{a.Item1[0]},0x{a.Item1[1]} }}, \"{a.Item2} \");{Environment.NewLine}" )); - //var stOutput =""; - - //var flHash = new HashSet(sb); - //flHash.ToList().ForEach(a => stOutput = stOutput + a); - _configRegister.MeterRegisterDic.Clear(); foreach (var registerToCheck in tempConfigRegisters) @@ -1747,7 +1671,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore { var response = listPcb.ToArray(); PcbId = Encoding.ASCII.GetString(response).Split('\0')[0]; - + if (PcbId.Length < 8 && retriesLeft >= 1) { return GetPcbId(expectedLength, retriesLeft - 1); diff --git a/Common/Hardware/WaterMeter/WaterMeterCore/IMeter.cs b/Common/Hardware/WaterMeter/WaterMeterCore/IMeter.cs index 7e26dd0b..bbd0e215 100644 --- a/Common/Hardware/WaterMeter/WaterMeterCore/IMeter.cs +++ b/Common/Hardware/WaterMeter/WaterMeterCore/IMeter.cs @@ -120,7 +120,9 @@ namespace Xylem.Common.Hardware.WaterMeter.WaterMeterCore /// Start Login with out password service and a fixed password /// /// password for login - Boolean Login(String password); + /// execute immediately + /// speed up login + Boolean Login(String password, Boolean runImmediately = true, Boolean quickLogin = false); /// /// set up measurement parameter and set meter into test-mode diff --git a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs index 8758aa2c..d4241dbf 100644 --- a/Common/Ui/GenesisToolBox/FrmFwUpdate.cs +++ b/Common/Ui/GenesisToolBox/FrmFwUpdate.cs @@ -1935,7 +1935,7 @@ namespace Xylem.Common.Ui.GenesisToolBox Task.Factory.StartNew(() => { - if (!_currentGenesis.IsLoggedOn) _currentGenesis.ReLogin(); + _currentGenesis.ReLogin(); _meterFwUpdate.UploadConfigFile(); Thread.Sleep(1000); }).ContinueWith(delegate