예제 #1
0
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            _deferral              = taskInstance.GetDeferral();
            taskInstance.Canceled += TaskInstance_Canceled;

            try
            {
                _logger = new SyslogLogger();
                _logger.Info("Starting weather station service");
            }
            catch (Exception ex)
            {
                throw ex;
            }

            try
            {
                _sensorsClient   = new RinsenOneWireClient();
                _reportingClient = new WebReportingClient(_logger);

                if (_reportingClient.SupportsSensorsUpdate)
                {
                    _logger.Info("Sending sensors info is allowed, updating sensors info");

                    var sensorIds = _sensorsClient.ListSensors();
                    await _reportingClient.UpdateSensors(sensorIds);
                }

                _logger.Info("Initializing sensors reading timer");
                _timer = new Timer(TemperatureCallback, null, 0, 5 * 60 * 1000);
                _logger.Info("Timer successfully initialized");
            }
            catch (Exception ex)
            {
                _logger.Critical(ex.ToString());

                _logger.Info("Critical exception occured while reporting sensors, closing");
                _deferral.Complete();
                return;
            }

            _logger.Info("Entering service loop");

            while (!_isClosing)
            {
                Task.Delay(2000).Wait();
            }

            _logger.Info("Exiting service loop");
        }
예제 #2
0
        private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
        {
            _logger.Info("Task was cancelled, reason: " + reason);

            _isClosing = true;

            if (_timer != null)
            {
                _timer.Dispose();
                _timer = null;
            }

            if (_sensorsClient != null)
            {
                var disposable = _sensorsClient as IDisposable;
                if (disposable != null)
                {
                    disposable.Dispose();
                }
                _sensorsClient = null;
            }

            if (_reportingClient != null)
            {
                var disposable = _reportingClient as IDisposable;
                if (disposable != null)
                {
                    disposable.Dispose();
                }
                _reportingClient = null;
            }

            if (_logger != null)
            {
                var disposable = _logger as IDisposable;
                if (disposable != null)
                {
                    disposable.Dispose();
                }
                _logger = null;
            }

            if (_deferral != null)
            {
                _deferral.Complete();
                _deferral = null;
            }
        }