/// <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);
        }
Exemple #3
0
        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;
            }
        }