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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 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);
         }
     }
 }
Ejemplo n.º 4
0
        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);
        }