public TemperatureWorker(
     ILogger <TemperatureWorker> logger,
     ITemperatureReader temperatureReader,
     IHubContext <TemperatureHub> temperatureHubContext,
     ITemperatureSource temperatureSource)
 {
     this.logger                = logger;
     this.temperatureReader     = temperatureReader;
     this.temperatureHubContext = temperatureHubContext;
     this.temperatureSource     = temperatureSource;
 }
Exemple #2
0
        static void Main(string[] args)
        {
            ITemperatureSource source = setupTemperatureSource();

            source.RegisterListener(new ConsoleListener());
            source.RegisterListener(setupThermometer());

            while (source.HasData())
            {
                source.EmitData();
            }
            Console.ReadLine();
        }
 public TemperatureController(ITemperatureSource temperatureSource)
 {
     this.temperatureSource = temperatureSource;
 }
            public RoomThermalManager(
                IRoom room,
                float initialThermalPixelSize,
                float initialThermalTickDuration,
                ITemperatureSource outsideTemperatureSource,
                ITemperatureSource <Vector3> initialRoomTemperatureSource,
                IEnumerable <IThermalObject> initialThermalObjects = null)
            {
                #region Thermal Pixel Size Validation

                if (float.IsNaN(initialThermalPixelSize))
                {
                    throw new ArgumentOutOfRangeException(nameof(initialThermalPixelSize), initialThermalPixelSize, "NaN is an invalid size value.");
                }

                if (float.IsPositiveInfinity(initialThermalPixelSize))
                {
                    throw new ArgumentOutOfRangeException(nameof(initialThermalPixelSize), initialThermalPixelSize, "Positive infinity is an invalid size value.");
                }

                if (float.IsNegativeInfinity(initialThermalPixelSize))
                {
                    throw new ArgumentOutOfRangeException(nameof(initialThermalPixelSize), initialThermalPixelSize, "Negative infinity is an invalid size value.");
                }

                if (initialThermalPixelSize <= 0f)
                {
                    throw new ArgumentOutOfRangeException(nameof(initialThermalPixelSize), initialThermalPixelSize, "Zero or negative values are invalid size values.");
                }

                #endregion

                #region Thermal Tick Duration Validation

                if (float.IsNaN(initialThermalTickDuration))
                {
                    throw new ArgumentOutOfRangeException(nameof(initialThermalTickDuration), initialThermalTickDuration, "NaN is an invalid duration value.");
                }

                if (float.IsPositiveInfinity(initialThermalTickDuration))
                {
                    throw new ArgumentOutOfRangeException(nameof(initialThermalTickDuration), initialThermalTickDuration, "Positive infinity is an invalid duration value.");
                }

                if (float.IsNegativeInfinity(initialThermalTickDuration))
                {
                    throw new ArgumentOutOfRangeException(nameof(initialThermalTickDuration), initialThermalTickDuration, "Negative infinity is an invalid duration value.");
                }

                if (initialThermalTickDuration <= 0f)
                {
                    throw new ArgumentOutOfRangeException(nameof(initialThermalTickDuration), initialThermalTickDuration, "Zero or negative values are invalid duration values.");
                }

                #endregion

                _thermalUpdateLock = new object();

                Room = room ?? throw new ArgumentNullException(nameof(room));

                _thermalPixelSize        = initialThermalPixelSize;
                _thermalPixelSizeSquared = _thermalPixelSize * _thermalPixelSize;
                _thermalPixelSizeCubed   = _thermalPixelSizeSquared * _thermalPixelSize;

                _thermalTickDuration      = initialThermalTickDuration;
                _outsideTemperatureSource = outsideTemperatureSource ?? throw new ArgumentNullException(nameof(outsideTemperatureSource));
                _outsideTemperature       = outsideTemperatureSource.GetTemperature();

                _stationaryThermalObjects           = new List <IThermalObject>();
                _movableThermalObjects              = new List <IThermalObject>();
                _movableThermalObjectsPositionCache = new Dictionary <IThermalObject, (Vector2 Position, SurfaceDescriptor?Surface)>();

                if (initialThermalObjects != null)
                {
                    foreach (IThermalObject thermalObject in initialThermalObjects)
                    {
                        if (thermalObject.CanNotChangePosition)
                        {
                            _stationaryThermalObjects.Add(thermalObject);
                        }
                        else
                        {
                            _movableThermalObjects.Add(thermalObject);
                        }
                    }
                }

                _totalTemperatureStatisticsBuilder    = new TemperatureStatisticsBuilder();
                _capturedTemperatureStatisticsBuilder = new TemperatureStatisticsBuilder();

                _surfaceAreaPerThermalPixelOfThermalObject = new Dictionary <IThermalObject, float>();

                CalculateThermalPixels(initialThermalPixelSize, initialRoomTemperatureSource);
            }