public Processor(IActorRef listener, IAverageService averageService) { this.listener = listener; Context.System.Scheduler.ScheduleTellRepeatedly(averageSendInterval, averageSendInterval, Self, new CalculateAverage(), Self); Receive <DeviceTemperature>(msg => averageService.AddValue(msg.DeviceId, new TemperatureValue(msg.Value, DateTime.UtcNow), (exceeded) => { if (exceeded) { listener.Tell(new ThresholdExceeded(msg.DeviceId)); } else { listener.Tell(new ValueNormalized(msg.DeviceId)); } }) ); Receive <CalculateAverage>(msg => listener.Tell(new AverageTemperature(averageService.Average(DateTime.UtcNow)))); }
public override async Task OnActivateAsync() { averageService = new OptimizedAverageService(5.0, TimeSpan.FromSeconds(3)); RegisterTimer(CalculateAverage, null, FromSeconds(1), FromSeconds(1)); await base.OnActivateAsync(); }
public static Props CreateProps(IActorRef listener, IAverageService averageService) { return(Props.Create(() => new Processor(listener, averageService))); }