예제 #1
0
		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);
			}
		}
예제 #2
0
		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);
			}
		}