diff --git a/Common/Common.sln b/Common/Common.sln index 03e76c5a..cf866ba3 100644 --- a/Common/Common.sln +++ b/Common/Common.sln @@ -3441,6 +3441,7 @@ Global {E9FAAF12-8721-46AC-8181-744001E3314E} = {57AA2731-BFD9-40A5-820F-E943FBC75D91} {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB} = {7A0EE7B8-6B7E-41E9-B679-319C8CA48CF1} {A25A96FD-604B-43BE-80CD-A953152C2175} = {0C89F3A2-BBB9-4E09-B424-D2D4395F046F} + {AC434B18-4D7B-49BA-9AD5-0527C79E8297} = {B5F43F61-4448-4992-85B5-7EDFB82FD643} {4806D89A-FBFB-41BC-AAA7-2242444BF55A} = {57AA2731-BFD9-40A5-820F-E943FBC75D91} {0FFBCA6C-E828-4196-B0A8-988DEA3E077F} = {03D4F23E-7E4A-4091-BC96-036C996D351A} {70BF5094-0F03-41FC-B0BD-BEFCF51686C9} = {03D4F23E-7E4A-4091-BC96-036C996D351A} diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisCore.csproj b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisCore.csproj index 008a4078..51eaf560 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisCore.csproj +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisCore.csproj @@ -327,6 +327,10 @@ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C} GenesisConfig + + {AC434B18-4D7B-49BA-9AD5-0527C79E8297} + GenesisPwd + {8BDD2789-96D4-43EA-AAD7-0F49D0347998} ProtocolCore diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs index 64430032..b9f0dfc6 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisCore/GenesisMeter.cs @@ -26,6 +26,7 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages; using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments; using Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords; using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig; +using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd; using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.ProtocolCore; using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol; using Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts; @@ -959,13 +960,13 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore /// /// - Password had been reset to empty string if read from file, corrected! /// + /// + /// - Used + /// private String GetPassword() { - var url = ServiceUrls.GenesisGetPasswordServiceUrl(); - var password = ""; - - //without PCB ID it is not possible to login, - //but if it is already assigned to this Gensis, don't read it again + // without PCB ID it is not possible to login, + // but if it is already assigned to this Genesis, don't read it again if (string.IsNullOrEmpty(PcbId)) { //GetPcbId fills the PsbId property @@ -976,41 +977,29 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore { return ""; } - } } - url += PcbId; - try + // on unknown password try to get it from DB + if (MeterPwdHandlerDb.GetPasswordFromDb(PcbId, out var password)) { - //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})"); + _logger.Info($"Slot:{Slot} - Got password from GenesisPasswordService, " + + $"URL({ServiceUrls.GenesisGetPasswordServiceUrl() + PcbId})"); } - catch (Exception ex) + else { _logger.Info($"Slot:{Slot} - Cannot get password from GenesisPasswordService, " + - $"URL({url}), Error({ex.Message})"); - if (File.Exists(ProgramConfig.OfflineInfoFile)) + $"URL({ServiceUrls.GenesisGetPasswordServiceUrl() + PcbId}))"); + // try to read the password from an offline password file + if (!File.Exists(ProgramConfig.OfflineInfoFile)) return password; + + var listOfOfflinePasswords = JsonConvert.DeserializeObject>( + File.ReadAllText(ProgramConfig.OfflineInfoFile)); + password = listOfOfflinePasswords.First(x => x.PcbId == PcbId).Password; + + if (!string.IsNullOrEmpty(password)) { - 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!"); - } + _logger.Info($"Slot:{Slot} - Got password for PcbId:{PcbId} from password file!"); } } diff --git a/Common/Hardware/WaterMeter/Genesis/GenesisPwd/MeterPwdHandlerDb.cs b/Common/Hardware/WaterMeter/Genesis/GenesisPwd/MeterPwdHandlerDb.cs index beb49ef3..c15f6599 100644 --- a/Common/Hardware/WaterMeter/Genesis/GenesisPwd/MeterPwdHandlerDb.cs +++ b/Common/Hardware/WaterMeter/Genesis/GenesisPwd/MeterPwdHandlerDb.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.IO; using System.Linq; using System.Net; using System.Text; @@ -26,28 +24,31 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisPwd /// /// - Initial. /// + /// + /// - Used JsonConvert instead of StreamReader. + /// public static Boolean GetPasswordFromDb(String pcbId, out String password) { - var url = ServiceUrls.GenesisGetPasswordServiceUrl(); password = ""; + if (string.IsNullOrEmpty(pcbId)) + { + return false; + } try { - var http = (HttpWebRequest)WebRequest.Create(url + pcbId); - var response = (HttpWebResponse)http.GetResponse(); - var responseStream = response.GetResponseStream(); - if (responseStream == null) + var url = ServiceUrls.GenesisGetPasswordServiceUrl(); + var response = LocalWebRequest.GetRequest(url + pcbId, 2000); + password = JsonConvert.DeserializeObject(response); + if (string.IsNullOrEmpty(password)) { + password = ""; return false; } - using (var sr = new StreamReader(responseStream)) - { - var responseJson = sr.ReadToEnd(); - password = responseJson.Trim('"'); - } } catch (Exception ) { + password = ""; return false; }