public Task ConnectAsync()
        {
            IsConnected = true;
            _worker     = _workerController.StartWorker(_config.UpdateDataPeriod, WorkMethod);

            return(Task.Delay(_config.ConnectDelay));
        }
        /// <inheritdoc />
        public override void OnOpen()
        {
            WeekDayModel weekDay = _dayOfWeekMapper.ToModel(DateTime.Now.DayOfWeek);

            WeekDaySelect(weekDay);
            _updateColorWorker = _workerController.StartWorker(UpdateScheduleColors, _updateColorInterval, false);
        }
Beispiel #3
0
        public void Start()
        {
            Stop();
            var interval = new TimeSpan(Math.Max(_options.WorkerInterval.Ticks, WorkerMinimumInterval.Ticks));

            _logger.Info($"{GetType().Name}: запускается воркер с интервалом {interval} (минимально возможный интервал: {WorkerMinimumInterval})");
            _worker = _workerController.StartWorker(() => CheckApartments().GetAwaiter().GetResult(), interval);
        }
Beispiel #4
0
 /// <summary>
 /// Запускает контроллера
 /// </summary>
 public void Start()
 {
     if (!_processingPeriod.HasValue)
     {
         throw new InvalidOperationException($"Необходимо сначала инициализировать контроллер методом {nameof(Init)}");
     }
     _worker       = _workerController.StartWorker(_processingPeriod.Value, async() => await SyncAsync().ConfigureAwait(false));
     _isProcessing = true;
     IsPaused      = false;
 }
        public async Task ConnectAsync()
        {
            AssertInitParams();

            if (IsConnected)
            {
                throw new InvalidOperationException($"{GetType().Name} уже подключен к устройству");
            }

            try
            {
                // очистим перед подключением все накопленные ошибки
                while (_lastExceptions.TryDequeue(out _))
                {
                }

                var monitorIpAddress = await DiscoverMonitorIpAddressAsync()
                                       .ConfigureAwait(false);

                _tcpClient = new TcpClient();

                await _tcpClient.ConnectAsync(monitorIpAddress, _initParams.MonitorTcpPort)
                .ConfigureAwait(false);

                _stream = _tcpClient.GetStream();
                _mitar  = new MitarMonitorDataReceiver(_stream);
                _mitar.Start();
                // ReSharper disable once HeapView.CanAvoidClosure
                _syncWorker = _workerController.StartWorker(_initParams.UpdateDataPeriod, async() =>
                {
                    try
                    {
                        //todo сюды бы токен отмены
                        await UpdateDataAsync()
                        .ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        IsConnected = false;
                        _workerController.CloseWorker(_syncWorker);
                        _lastExceptions.Enqueue(ex);
                    }
                });
                IsConnected = true;
            }
            catch (SocketException e)
            {
                IsConnected = false;
                throw new DeviceConnectionException("Ошибка подключения к кардиомонитору", e);
            }
            catch (ObjectDisposedException e)
            {
                IsConnected = false;
                throw new DeviceConnectionException("Ошибка подключения к кардиомонитору", e);
            }
            catch (Exception e)
            {
                IsConnected = false;
                throw new DeviceProcessingException("Ошибка подключения к кардиомонитору", e);
            }
        }
Beispiel #6
0
        public async Task ConnectAsync()
        {
            AssertInitParams();
            if (IsConnected)
            {
                throw new InvalidOperationException($"{GetType().Name} уже подключен к устройству");
            }
            if (!IpEndPointParser.TryParse(_config.BedIpEndpoint, out _bedIpEndPoint))
            {
                throw new ArgumentException("Не верно указан адрес подключения к кровати. Требуемый формат - ip:port");
            }

            try
            {
                // очистим перед подключением все накопленные ошибки
                while (_lastExceptions.TryDequeue(out _))
                {
                }

                await InternalDisconectAsync().ConfigureAwait(false);

                _udpSendingClient = new UdpClient
                {
                    Client =
                    {
                        ReceiveTimeout = (int)_config.Timeout.TotalMilliseconds,
                        SendTimeout    = (int)_config.Timeout.TotalMilliseconds
                    }
                };

                _udpReceivingClient = new UdpClient(_bedIpEndPoint.Port)
                {
                    Client =
                    {
                        ReceiveTimeout = (int)_config.Timeout.TotalMilliseconds,
                        SendTimeout    = (int)_config.Timeout.TotalMilliseconds
                    }
                };
                _udpSendingClient.Connect(_bedIpEndPoint);
                _udpReceivingClient.Connect(_bedIpEndPoint);

                IsConnected = true;
                await UpdateRegistersValueAsync()
                .ConfigureAwait(false);

                _syncWorker = _workerController.StartWorker(_config.UpdateDataPeriod, async() =>
                {
                    if (_initialisingStatus == DeviceIsInitialising)
                    {
                        return;
                    }

                    try
                    {
                        //todo сюды бы токен отмены
                        await UpdateRegistersValueAsync()
                        .ConfigureAwait(false);
                    }
                    catch (Exception e)
                    {
                        IsConnected = false;
                        _workerController.CloseWorker(_syncWorker);
                        _lastExceptions.Enqueue(e);
                    }
                });
            }
            catch (DeviceConnectionException)
            {
                IsConnected = false;
                throw;
            }
            catch (SocketException e)
            {
                IsConnected = false;
                throw new DeviceConnectionException("Ошибка подключения к инверсионному столу", e);
            }
            catch (ObjectDisposedException e)
            {
                IsConnected = false;
                throw new DeviceConnectionException("Ошибка подключения к инверсионному столу", e);
            }
            catch (Exception e)
            {
                IsConnected = false;
                throw new DeviceProcessingException("Ошибка в ходе обработки данных от инверсионного стола", e);
            }
        }