private void ProcessNewQuarters(MeterReadingReceived message)
        {
            var processNewQuarters = new QuarterlyConsumptionParameters
            {
                StartDate         = _referenceDate,
                StartMeterReading = _referenceValue,
                PreviousMessage   = _lastMessage,
                CurrentMessage    = message
            };

            var quarters = QuarterlyConsumptionHelper.ComputeQuarterlyConsumption(processNewQuarters);

            foreach (var quarter in quarters.Quarters)
            {
                var quarterMessage = new QuarterCompleted
                {
                    DeviceId    = message.DeviceId,
                    Timestamp   = quarter.Item1,
                    Consumption = quarter.Item2,
                    Unit        = message.Unit
                };
                DistributeMessage(quarterMessage);
            }

            SetNewReferenceValues(message, quarters);
        }
Beispiel #2
0
 private void StartNewHour(QuarterCompleted message)
 {
     _referenceHour  = message.Timestamp.HourNumber();
     _hourlyMessages = new List <QuarterCompleted> {
         message
     };
 }
Beispiel #3
0
        private void ProcessHour(QuarterCompleted message)
        {
            var hourMessage = new HourCompleted
            {
                DeviceId    = message.DeviceId,
                Timestamp   = DateTimeExtensions.GetHourDate(_referenceHour),
                Consumption = _hourlyMessages.Sum(x => x.Consumption),
                Unit        = message.Unit
            };

            Context.Parent.Tell(hourMessage);
        }
Beispiel #4
0
        public void Handle(QuarterCompleted message)
        {
            if (_referenceHour == 0)
            {
                StartNewHour(message);
            }

            if (message.Timestamp.HourNumber() != _referenceHour)
            {
                ProcessHour(message);
                StartNewHour(message);
            }
            else
            {
                _hourlyMessages.Add(message);
            }
        }
 private void DistributeMessage(QuarterCompleted quarterMessage)
 {
     Context.Parent.Tell(quarterMessage);
 }