/// <summary> /// Найти все ус-ва по имени и передать им данные. /// </summary> /// <param name="inputDatas">Данные для нескольких ус-в</param> /// <returns>Список ОШИБОК</returns> public async Task <IEnumerable <string> > ApplyInputData(IEnumerable <InputData <TIn> > inputDatas) { //найти Device по имени и передать ему данные var errors = new List <string>(); var tasks = new List <Task>(); foreach (var inData in inputDatas) { var device = _mediatorForStorages.GetDevice(inData.DeviceName); if (device == null) { errors.Add($"устройство не найденно: {inData.DeviceName}"); continue; } if (_mediatorForStorages.GetExchange(inData.ExchangeName) == null) { errors.Add($"Обмен не найденн: {inData.ExchangeName}"); continue; } if (string.IsNullOrEmpty(inData.ExchangeName)) { tasks.Add(device.Send2AllExchanges(inData.DataAction, inData.Data, inData.Command)); } else { tasks.Add(device.Send2ConcreteExchanges(inData.ExchangeName, inData.DataAction, inData.Data, inData.Command)); } } await Task.WhenAll(tasks); return(errors); }
//TODO: Добавить в контроллер DevicesController /// <summary> /// Подписка ус-ва на события публикуемуе на шину данных. /// </summary> /// <param name="deviceName">Имя ус-ва</param> /// <param name="topicName4MessageBroker">название топика на шине данных</param> public void SubscrubeDeviceOnExchangesEvents(string deviceName, string topicName4MessageBroker = null) { var device = _mediatorForStorages.GetDevice(deviceName); if (device == null) { throw new ArgumentException(); } //Подписка уже есть. подписываться 2-ой раз нельзя if (!string.IsNullOrEmpty(device.TopicName4MessageBroker)) { throw new ActionHandlerException($"Ошибка подписи устройства на передачу данных по шине. Устройство уже подписанно на шину {device.TopicName4MessageBroker}. Необходимо сначало отписаться"); } device.SubscrubeOnExchangesEvents(topicName4MessageBroker); }
public async Task <IActionResult> RemoveDevice([FromRoute] string deviceName) { var device = _mediatorForStorages.GetDevice(deviceName); if (device == null) { return(NotFound(deviceName)); } try { await _mediatorForStorages.RemoveDevice(deviceName); return(Ok(device)); } catch (Exception ex) { _logger.Error(ex, "Ошибка в DevicesController/RemoveDevice"); throw; } }