public void WriteConfig(GKDevice gkControllerDevice, GKProgressCallback progressCallback, Guid clientUID) { Errors = new List<string>(); progressCallback = GKProcessorManager.StartProgress("Запись конфигурации", "Проверка связи", 1, false, GKProgressClientType.Administrator, clientUID); try { var gkDatabase = DescriptorsManager.GkDatabases.FirstOrDefault(x => x.RootDevice.UID == gkControllerDevice.UID); if (gkDatabase != null) { var kauDatabases = new List<KauDatabase>(); var lostKauDatabases = new List<KauDatabase>(); using (var gkLifecycleManager = new GKLifecycleManager(gkDatabase.RootDevice, "Проверка связи")) { gkLifecycleManager.AddItem("ГК"); var pingResult = DeviceBytesHelper.Ping(gkDatabase.RootDevice); if (pingResult.HasError) { Errors.Add("Устройство " + gkDatabase.RootDevice.PresentationName + " недоступно"); return; } foreach (var kauDatabase in gkDatabase.KauDatabases) { gkLifecycleManager.AddItem(kauDatabase.RootDevice.PresentationName); pingResult = DeviceBytesHelper.Ping(kauDatabase.RootDevice); if (!pingResult.HasError) { kauDatabases.Add(kauDatabase); } else { lostKauDatabases.Add(kauDatabase); } } } for (int i = 0; i < 3; i++) { Errors = new List<string>(); var summaryDescriptorsCount = 4 + gkDatabase.Descriptors.Count; kauDatabases.ForEach(x => { summaryDescriptorsCount += 3 + x.Descriptors.Count; }); var title = "Запись конфигурации в " + gkDatabase.RootDevice.PresentationName + (i > 0 ? " Попытка " + (i + 1) : ""); progressCallback = GKProcessorManager.StartProgress(title, "", summaryDescriptorsCount, false, GKProgressClientType.Administrator, clientUID); var result = DeviceBytesHelper.GoToTechnologicalRegime(gkDatabase.RootDevice, progressCallback, clientUID); if (!result) { Errors.Add("Не удалось перевести " + gkControllerDevice.PresentationName + " в технологический режим\nУстройство не доступно, либо вашего IP адреса нет в списке разрешенного адреса ГК"); continue; } result = DeviceBytesHelper.EraseDatabase(gkDatabase.RootDevice, progressCallback, clientUID); if (!result) { Errors.Add("Не удалось стереть базу данных ГК"); continue; } foreach (var kauDatabase in kauDatabases) { result = DeviceBytesHelper.GoToTechnologicalRegime(kauDatabase.RootDevice, progressCallback, clientUID); if (!result) { Errors.Add("Не удалось перевести КАУ в технологический режим"); continue; } if (!DeviceBytesHelper.EraseDatabase(kauDatabase.RootDevice, progressCallback, clientUID)) { Errors.Add("Не удалось стереть базу данных КАУ"); continue; } if (!WriteConfigToDevice(kauDatabase, progressCallback, clientUID)) { Errors.Add("Не удалось записать дескриптор КАУ"); } } result = WriteConfigToDevice(gkDatabase, progressCallback, clientUID); if (!result) { Errors.Add("Не удалось записать дескриптор ГК"); continue; } var gkFileReaderWriter = new GKFileReaderWriter(); gkFileReaderWriter.WriteFileToGK(gkControllerDevice, clientUID); if (gkFileReaderWriter.Error != null) { Errors.Add(gkFileReaderWriter.Error); break; } foreach (var kauDatabase in kauDatabases) { if (!DeviceBytesHelper.GoToWorkingRegime(kauDatabase.RootDevice, progressCallback, clientUID, kauDatabase.RootDevice.Driver.IsKau)) { Errors.Add("Не удалось перевести " + kauDatabase.RootDevice.PresentationName + " в рабочий режим"); } } if (!DeviceBytesHelper.GoToWorkingRegime(gkDatabase.RootDevice, progressCallback, clientUID, false)) { Errors.Add("Не удалось перевести " + gkDatabase.RootDevice + " в рабочий режим"); } break; } foreach (var kauDatabase in lostKauDatabases) { Errors.Add("Устройство " + kauDatabase.RootDevice.PresentationName + " недоступно"); } } } catch (Exception e) { Logger.Error(e, "GKDescriptorsWriter.WriteConfig"); Errors.Add(e.Message); } finally { if (progressCallback != null) GKProcessorManager.StopProgress(progressCallback, clientUID); } }
public void WriteConfig(XDevice gkDevice) { var progressCallback = GKProcessorManager.StartProgress("Запись конфигурации", "Проверка связи", 1, true, GKProgressClientType.Administrator); try { DescriptorsManager.Create(); var gkDatabase = DescriptorsManager.GkDatabases.FirstOrDefault(x => x.RootDevice.UID == gkDevice.UID); if (gkDatabase != null) { var result = DeviceBytesHelper.Ping(gkDatabase.RootDevice); if (!result) { Error = "Устройство " + gkDatabase.RootDevice.PresentationName + " недоступно"; return; } foreach (var kauDatabase in gkDatabase.KauDatabases) { result = DeviceBytesHelper.Ping(kauDatabase.RootDevice); if (!result) { Error = "Устройство " + kauDatabase.RootDevice.PresentationName + " недоступно"; return; } } for (int i = 0; i < 3; i++) { var summaryDescriptorsCount = 4 + gkDatabase.Descriptors.Count; gkDatabase.KauDatabases.ForEach(x => { summaryDescriptorsCount += 3 + x.Descriptors.Count; }); var title = "Запись конфигурации в " + gkDatabase.RootDevice.PresentationName + (i > 0 ? " Попытка " + (i + 1) : ""); progressCallback = GKProcessorManager.StartProgress(title, "", summaryDescriptorsCount, true, GKProgressClientType.Administrator); result = DeviceBytesHelper.GoToTechnologicalRegime(gkDatabase.RootDevice, progressCallback); if (progressCallback.IsCanceled) { DeviceBytesHelper.GoToWorkingRegime(gkDatabase.RootDevice, progressCallback); return; } if (!result) { Error = "Не удалось перевести " + gkDevice.PresentationName + " в технологический режим\n" + "Устройство не доступно, либо вашего " + "IP адреса нет в списке разрешенного адреса ГК"; continue; } result = DeviceBytesHelper.EraseDatabase(gkDatabase.RootDevice, progressCallback); if (progressCallback.IsCanceled) { gkDatabase.KauDatabases.Any(x => !DeviceBytesHelper.GoToWorkingRegime(x.RootDevice, progressCallback)); DeviceBytesHelper.GoToWorkingRegime(gkDatabase.RootDevice, progressCallback); return; } if (!result) { Error = "Не удалось стереть базу данных ГК"; continue; } foreach (var kauDatabase in gkDatabase.KauDatabases) { if (progressCallback.IsCanceled) { gkDatabase.KauDatabases.Any(x => !DeviceBytesHelper.GoToWorkingRegime(x.RootDevice, progressCallback)); DeviceBytesHelper.GoToWorkingRegime(gkDatabase.RootDevice, progressCallback); return; } result = DeviceBytesHelper.GoToTechnologicalRegime(kauDatabase.RootDevice, progressCallback); if (!result) { Error = "Не удалось перевести КАУ в технологический режим"; continue; } if (!DeviceBytesHelper.EraseDatabase(kauDatabase.RootDevice, progressCallback)) { Error = "Не удалось стереть базу данных КАУ"; continue; } if (!WriteConfigToDevice(kauDatabase, progressCallback)) { Error = "Не удалось записать дескриптор КАУ"; } } result = WriteConfigToDevice(gkDatabase, progressCallback); if (progressCallback.IsCanceled) { gkDatabase.KauDatabases.Any(x => !DeviceBytesHelper.GoToWorkingRegime(x.RootDevice, progressCallback)); DeviceBytesHelper.GoToWorkingRegime(gkDatabase.RootDevice, progressCallback); return; } if (!result) { Error = "Не удалось записать дескриптор ГК"; continue; } var gkFileReaderWriter = new GKFileReaderWriter(); gkFileReaderWriter.WriteFileToGK(gkDevice); if (gkFileReaderWriter.Error != null) { Error = gkFileReaderWriter.Error; break; } if (gkDatabase.KauDatabases.Any(x => !DeviceBytesHelper.GoToWorkingRegime(x.RootDevice, progressCallback))) { Error = "Не удалось перевести КАУ в рабочий режим"; } if (!DeviceBytesHelper.GoToWorkingRegime(gkDatabase.RootDevice, progressCallback)) { Error = "Не удалось перевести ГК в рабочий режим"; } break; } } } catch (Exception e) { Logger.Error(e, "GKDescriptorsWriter.WriteConfig"); Error = e.Message; } finally { if (progressCallback != null) GKProcessorManager.StopProgress(progressCallback); } }