Пример #1
0
        protected override void OnReceive(object message)
        {
            switch (message)
            {
            case RespondTemperature m when m.RequestId == TemperatureRequestCorrelactionId:
                if (m.Temperature.HasValue)
                {
                    var temperatureAvailable = new TemperatureAvailable(m.Temperature.Value);
                    RecordTemperatureReading(Context.Sender, temperatureAvailable);
                }
                else
                {
                    RecordTemperatureReading(Context.Sender, NoTemperatureAvailable.Instance);
                }
                break;

            case Terminated m:
                RecordTemperatureReading(Context.Sender, SensorNotAvailable.Instance);
                break;

            case TemperatureQueryCanceled m:
                foreach (var sensorActor in ActorRefToSensorId.Keys)
                {
                    Readings.Add(ActorRefToSensorId[sensorActor], SensorTimedOut.Instance);
                }
                Requester.Tell(new RespondFloorTemperatures(RequestId, Readings.ToImmutableDictionary()));
                Context.Stop(Self);
                break;

            default:
                Unhandled(message);
                break;
            }
        }
Пример #2
0
        private void RecordTemperatureReading(IActorRef sensor, ITemperatureQueryReading temperatureReading)
        {
            var sensorId = ActorRefToSensorId[sensor];

            Context.Unwatch(sensor);
            ActorRefToSensorId.Remove(sensor);
            Readings.Add(sensorId, temperatureReading);
            if (ActorRefToSensorId.Count == 0)
            {
                Requester.Tell(new RespondFloorTemperatures(RequestId, Readings.ToImmutableDictionary()));
                Context.Stop(Self);
            }
        }