public override Thermometer CreateResponse(Request request, decimal?startTemperature, decimal?endTemperature) { Thermometer response = null; decimal? temperature = GetCurentReductedTemperature(startTemperature, endTemperature, request.Unit); if (!temperature.HasValue) { return(response); } //Fluctuation limits are defined, so inform just one time threshold is reached //within the given fluctuation limits if (!thresholdReached) { if (ThresholdReached(temperature, request.Threshold)) { //Consider direction of temperature change if (TemperatureChangedInDefinedDirection(request.EventType, startTemperature, endTemperature)) { response = Thermometer.ThresholdResponse(DateTime.UtcNow); thresholdReached = true; } } } else { if (!WithinFluctuationLimits(temperature.Value, request.Threshold.Value, request.UpperFluctuationLimit, request.LowerFluctuationLimit)) { thresholdReached = false; } } return(response); }
public override Thermometer CreateResponse(Request request, decimal?startTemperature, decimal?endTemperature) { Thermometer response = null; decimal? temperature = GetCurentReductedTemperature(startTemperature, endTemperature, request.Unit); if (temperature.HasValue) { response = Thermometer.TemperatureResponse(DateTime.UtcNow, temperature.Value); } return(response); }
public void SendResponse(List <ITransmitter <Thermometer> > transmitters, decimal?startTemperature, decimal?endTemperature) { foreach (ITransmitter <Thermometer> transmitter in transmitters) { Request request = transmitter.Request; IScenario strategy = GetScenario(request, startTemperature, endTemperature); Thermometer response = strategy.CreateResponse(request, startTemperature, endTemperature); if (response != null) { transmitter.OnNext(response); } } }
public override Thermometer CreateResponse(Request request, decimal?startTemperature, decimal?endTemperature) { Thermometer response = null; decimal? temperature = GetCurentReductedTemperature(startTemperature, endTemperature, request.Unit); if (!temperature.HasValue) { return(response); } //Fluctuation limits are undefined, so inform each time threshold is reached if (ThresholdReached(temperature, request.Threshold.Value)) { //Consider direction of temperature change if (TemperatureChangedInDefinedDirection(request.EventType, startTemperature, endTemperature)) { response = Thermometer.ThresholdResponse(DateTime.UtcNow); } } return(response); }