public IConfigDeviceViewModel CreateConfigDeviceViewModel(IConfigLogicalDevice configLogicalDevice) { IConfigDeviceViewModel configDeviceViewModel = _container.Resolve <IConfigDeviceViewModel>(); configDeviceViewModel.Model = configLogicalDevice; return(configDeviceViewModel); }
/// <summary> /// Сохраняет новый номер позиции устройства в хранилище /// </summary> /// <param name="device">Устройство</param> /// <returns>задача</returns> public async Task UpdateDevicePositionAsync(IConfigLogicalDevice device, int newNumber) { var context = await this._persistanceService.GetDevicePersistableContextAsync(device.DeviceId); device.CreateMomento().State.DeviceNumber = newNumber; context.SaveDeviceMomentoAsync(device.CreateMomento()); }
/// <summary> /// Updates an instance of <see cref="IConfiguratedDeviceSchemeTable"/> in <see cref="IConfigLogicalDevice" /> in the system registry asynchronously /// Асинхронно обновляет схему устройства /// </summary> /// <param name="device">An instance of <see cref="LogicalDeviceInformation" /> to update. /// Устройство в котором будет обновляться схема</param> /// <param name="scheme">New scheme. Instance of <see cref="IConfiguratedDeviceSchemeTable"/> /// Новая схема для устройства</param> /// <returns>An instance of System.Threading.Tasks.Task that represents current asynchronous operation</returns> public async Task UpdateDeviceSchemeAsync(IConfigLogicalDevice device, IConfiguratedDeviceSchemeTable scheme) { var context = await this._persistanceService.GetDevicePersistableContextAsync(device.DeviceId); device.CreateMomento().State.SchemeTable = scheme; context.SaveDeviceMomentoAsync(device.CreateMomento()); }
/// <summary> /// Maps the <see cref="IConfigLogicalDevice" /> to <see cref="DeviceModel" /> /// Конвертирует <see cref="IConfigLogicalDevice" /> в <see cref="DeviceModel" /> /// </summary> /// <param name="device"> /// An instance of <see cref="IConfigLogicalDevice" /> to map to <see cref="DeviceModel" /> /// </param> /// <returns> /// Resulted instance of <see cref="DeviceModel" /> /// </returns> public static DeviceModel ToDeviceModel(this IConfigLogicalDevice device) { DeviceModel deviceModel = new DeviceModel(); deviceModel.DeviceFactoryTypeName = device.CreateMomento().State.DeviceType; deviceModel.Name = device.DeviceName; deviceModel.Description = device.DeviceDescription; deviceModel.AnalogMeterTypeName = device.CreateMomento().State.AnalogMeterType; deviceModel.DriverFactoryTypeName = "TCP_MB"; deviceModel.StarterDescriptions = new List <string>(3) { device.CreateMomento().State.Starter1Description, device.CreateMomento().State.Starter2Description, device.CreateMomento().State.Starter3Description }; deviceModel.TransformKoefA = device.CreateMomento().State.TransformKoefA; deviceModel.TransformKoefB = device.CreateMomento().State.TransformKoefB; deviceModel.TransformKoefC = device.CreateMomento().State.TransformKoefC; deviceModel.ChannelNumberOfStarter1 = device.CreateMomento().State.ChannelNumberOfStarter1; deviceModel.ChannelNumberOfStarter2 = device.CreateMomento().State.ChannelNumberOfStarter2; deviceModel.ChannelNumberOfStarter3 = device.CreateMomento().State.ChannelNumberOfStarter3; var fiders = device.CreateMomento().State.CustomDeviceSchemeTable?.FidersTable .GetEnumeratorObjects(); if (fiders != null) { deviceModel.CustomFidersOnDevice.AddRange(fiders); } var signals = device.CreateMomento().State.CustomDeviceSchemeTable?.SignalsTable.GetEnumeratorObjects(); if (signals != null) { deviceModel.CustomSignalsOnDevice.AddRange(signals); } var inds = device.CreateMomento().State.CustomDeviceSchemeTable?.IndicatorsTable.GetEnumeratorObjects(); if (inds != null) { deviceModel.CustomIndicatorsOnDevice.AddRange(inds); } var cascades = device.CreateMomento().State.CustomDeviceSchemeTable?.CascadeIndicatorsTable.GetEnumeratorObjects(); if (cascades != null) { deviceModel.CascadeIndicatorsOnDevice.AddRange(cascades); } return(deviceModel); }
private async void OnCreateNewDevice(DeviceModel deviceModel) { var busyToken = this.InteractWithBusy(); try { IConfigLogicalDevice resultedDevice = await this._configService.CreateDeviceAsync(deviceModel.ToLogicalDeviceInfo()); this.Devices.Add(_configDeviceViewModelFactory.CreateConfigDeviceViewModel(resultedDevice)); this.SaveNewWidgetPosition(); } catch (Exception error) { busyToken.Dispose(); this.InteractWithError(error); } busyToken.Dispose(); }
/// <summary> /// Removes an instance of <see cref="IConfigLogicalDevice" /> from the system asynchronously /// Асинхронно Удаляет устройство из xml /// </summary> /// <param name="device"> /// An instance of <see cref="IConfigLogicalDevice" /> to remove. Use DeviceId only. /// Сущность конфиг устройства, которая будет удалена.(Вместе с драйвером этого устройства) /// </param> /// <returns>An instance of System.Threading.Tasks.Task that represents current asynchronous operation</returns> public async Task RemoveDeviceAsync(IConfigLogicalDevice device) { this.ThrowIfDisposed(); await this.Initialization; try { await this._persistanceService.RemoveDevicePersistanbleContextAsync(device.DeviceId); var stringDriverId = device.CreateMomento().State.RelatedDriverId; await this._driversService.RemoveDriverAsync(Guid.Parse(stringDriverId)); this._devicesCache.Remove(device.DeviceId); } catch (Exception tException) { throw tException; //new LogicalDeviceException(); } }
/// <summary> /// Updates an instance of <see cref="IConfigLogicalDevice" /> in the system registry asynchronously /// Обновит данное устройство. /// </summary> /// <param name="deviceInfo"> /// An instance of <see cref="LogicalDeviceInformation" /> with data to update /// Новые данные для обновляемого устройства /// </param> /// <param name="editingDevice"> /// An instance of <see cref="IConfigLogicalDevice" /> to update /// Устройство, которое будет обновляться /// </param> /// <returns>An instance of System.Threading.Tasks.Task that represents current asynchronous operation</returns> public async Task <IConfigLogicalDevice> UpdateDeviceAsync(LogicalDeviceInformation deviceInfo, IConfigLogicalDevice editingDevice) { this.ThrowIfDisposed(); await this.Initialization; Guard.AgainstNullReference(deviceInfo, "deviceInfo"); var drivers = await this._driversService.GetAllDriversAsync(); if (!editingDevice.DeviceName.Equals(deviceInfo.DeviceName) && this._devicesCache.Any(dev => dev.Value.DeviceName.Equals(deviceInfo.DeviceName))) { throw new InvalidOperationException("Устройство с таким именем уже существует"); } var editingDriver = await this._driversService.GetDriverById(Guid.Parse( editingDevice.CreateMomento().State.RelatedDriverId)); if (!editingDriver.CreateMomento().State.GetTcpAddress().Equals(deviceInfo.DriverTcpAddress) && drivers.Any(dr => dr.CreateMomento().State.GetTcpAddress().Equals(deviceInfo.DriverTcpAddress))) { throw new InvalidOperationException("Устройство с таким IP-адресом уже существует"); } await this.RemoveDeviceAsync(editingDevice); IConfigLogicalDevice logicalDevice = null; Guid?driverId = null; if (!string.IsNullOrEmpty(deviceInfo.DriverTypeName)) { try { var driver = await this._driversService.CreateDriverAsync(new LogicalDriverInformation { DriverType = deviceInfo.DriverTypeName, DriverTcpPort = deviceInfo.DriverTcpPort, DriverTcpAddress = deviceInfo.DriverTcpAddress }); driverId = driver.DriverId; logicalDevice = await this.CreateLogicalDeviceInternalAsync(deviceInfo, driverId); logicalDevice.CreateMomento().State.Starter1Description = deviceInfo.StarterDescriptions[0]; logicalDevice.CreateMomento().State.Starter2Description = deviceInfo.StarterDescriptions[1]; logicalDevice.CreateMomento().State.Starter3Description = deviceInfo.StarterDescriptions[2]; logicalDevice.CreateMomento().State.TransformKoefA = deviceInfo.TransformKoefA; logicalDevice.CreateMomento().State.TransformKoefB = deviceInfo.TransformKoefB; logicalDevice.CreateMomento().State.TransformKoefC = deviceInfo.TransformKoefC; logicalDevice.CreateMomento().State.ChannelNumberOfStarter1 = deviceInfo.ChannelNumberOfStarter1; logicalDevice.CreateMomento().State.ChannelNumberOfStarter2 = deviceInfo.ChannelNumberOfStarter2; logicalDevice.CreateMomento().State.ChannelNumberOfStarter3 = deviceInfo.ChannelNumberOfStarter3; var context = await this._persistanceService.GetDevicePersistableContextAsync(logicalDevice.DeviceId); logicalDevice.CreateMomento().State.SchemeTable = editingDevice.CreateMomento().State.SchemeTable; int number = editingDevice.CreateMomento().State.DeviceNumber; logicalDevice.CreateMomento().State.DeviceNumber = number; context.SaveDeviceMomentoAsync(logicalDevice.CreateMomento()); this._devicesCache.Remove(logicalDevice.DeviceId); this._devicesCache.Add(logicalDevice.DeviceId, logicalDevice); } catch (Exception ex) { throw new LogicalDeviceException("Редактирование невозможно", ex); } } return(logicalDevice); }
/// <summary> /// Creates an instance of <see cref="IConfigLogicalDevice" /> asynchronously /// Создает новое устройство на основе информации о нём полученной в параметрах /// </summary> /// <returns>An instance of System.Threading.Tasks.Task that represents current asynchronous operation</returns> public async Task <IConfigLogicalDevice> CreateDeviceAsync(LogicalDeviceInformation deviceInfo) { this.ThrowIfDisposed(); await this.Initialization; Guard.AgainstNullReference(deviceInfo, "deviceInfo"); Guid?driverId = null; if (!string.IsNullOrEmpty(deviceInfo.DriverTypeName)) { try { var driver = await this._driversService.CreateDriverAsync(new LogicalDriverInformation { DriverType = deviceInfo.DriverTypeName, DriverTcpPort = deviceInfo.DriverTcpPort, DriverTcpAddress = deviceInfo.DriverTcpAddress }); driverId = driver.DriverId; } catch (Exception exception) { throw new Exception(exception.Message); } } IConfigLogicalDevice logicalDevice = null; try { logicalDevice = await this.CreateLogicalDeviceInternalAsync(deviceInfo, driverId); int number = 0; if (this._devicesCache.Count > 0) { var numbers = this._devicesCache.Values.Select( device => device.CreateMomento().State.DeviceNumber).ToList(); for (int i = 0; i < 104; i++) { if (!numbers.Contains(i)) { number = i; break; } } } logicalDevice.CreateMomento().State.AnalogMeterType = deviceInfo.AnalogMeterTypeName; logicalDevice.CreateMomento().State.DeviceType = deviceInfo.DeviceTypeName; logicalDevice.CreateMomento().State.DeviceNumber = number; logicalDevice.CreateMomento().State.Starter1Description = deviceInfo.StarterDescriptions[0]; logicalDevice.CreateMomento().State.Starter2Description = deviceInfo.StarterDescriptions[1]; logicalDevice.CreateMomento().State.Starter3Description = deviceInfo.StarterDescriptions[2]; logicalDevice.CreateMomento().State.TransformKoefA = deviceInfo.TransformKoefA; logicalDevice.CreateMomento().State.TransformKoefB = deviceInfo.TransformKoefB; logicalDevice.CreateMomento().State.TransformKoefC = deviceInfo.TransformKoefC; logicalDevice.CreateMomento().State.ChannelNumberOfStarter1 = deviceInfo.ChannelNumberOfStarter1; logicalDevice.CreateMomento().State.ChannelNumberOfStarter2 = deviceInfo.ChannelNumberOfStarter2; logicalDevice.CreateMomento().State.ChannelNumberOfStarter3 = deviceInfo.ChannelNumberOfStarter3; } catch (Exception ex) { if (driverId.HasValue) { this.RemoveDriver(driverId.Value); } throw ex; } try { var context = await this._persistanceService.GetDevicePersistableContextAsync(logicalDevice.DeviceId); context.SaveDeviceMomentoAsync(logicalDevice.CreateMomento()); this._devicesCache.Add(logicalDevice.DeviceId, logicalDevice); } catch (Exception error) { if (driverId.HasValue) { this._driversService.RemoveDriverAsync(driverId.Value).Start(); } throw new LogicalDeviceException(deviceInfo, innerException: error); } return(logicalDevice); }