示例#1
0
        public void OnStateChanged(IDataProvider aDataProvider)
        {
            logger.Info("Уведомление о изменении состояния.");

            if (!IsInitialized()) {
                return;
            }

            try {
                var currentSystemState = aDataProvider.GetCurrentSystemState();
                if (IsEndOfScanning(currentSystemState)) {
                    endSlabScanTime = DateTime.Now;
                    if (endSlabScanTime - startSlabScanTime >= minimumScanTime) {
                        logger.Info("Время сканирования: " + (endSlabScanTime - startSlabScanTime));
                        var slabId = GetNewSlabId();
                        StoreSensorValues(slabId);
                        var slabModel = slabBuilder.BuildSlabModel(aIsUseFilters: true);
                        dimentionCalculator.CalculateDimentions(slabModel);
                        var dimentionValues = dimentionValueContainer.GetDimentionValues();
                        dimentionValueWriter.WriteDimentionValues(slabId, dimentionValues);
                        UpdateStandartSizeId(slabId, DetermineStandartSize(dimentionValues));
                    }
                    else {
                        logger.Info("Ложное срабатывание: сканирование длилось меньше временной отсечки.");
                    }
                }
                else { // начало сканирования.
                    startSlabScanTime = DateTime.Now;
                }

                lastSystemState = currentSystemState;
            }
            catch (Exception ex) {
                logger.Info("Ошибка после завершения сканирования: " + ex.Message + "\n" +
                            "Stack trace: " + ex.StackTrace);
            }
            finally {
                sensorValueContainer.Clear();
                dimentionValueContainer.Clear();
            }
        }