private void AddNewSimulation(AddNewSimulation sim) { if (_simulationQueue.Any(s => s.ProjectId == sim.ProjId)) { sim.OriginalSender.Tell(new SimulationAlreadyRunning { ProjId = sim.ProjId }); return; } _simulationQueue.Add(new SimulationItem { ProjectId = sim.ProjId, Technology = sim.Technology, SimulationState = SimulationState.Waiting }); var simulationStateChanged = new SimulationStateChanged { ProjectId = sim.ProjId, SimulationState = SimulationState.Waiting, Technology = sim.Technology }; NotifyAll(simulationStateChanged, sim.OriginalSender, Context.Parent); }
private void MoveToPaused(MoveToPaused sim) { var simulation = _simulationQueue.FirstOrDefault(s => s.ProjectId == sim.ProjectId); if (simulation == null) { sim.OriginalSender.Tell(new SimulationNotFound() { ProjId = sim.ProjectId }); return; } if (simulation.SimulationState != SimulationState.WaitingToPause) { sim.OriginalSender.Tell(new SimulationStateChangeIsInvalid() { ProjId = sim.ProjectId, CurrentState = simulation.SimulationState, RequestedState = SimulationState.Paused }); return; } simulation.SimulationState = SimulationState.Paused; var simulationStateChanged = new SimulationStateChanged() { ProjectId = sim.ProjectId, SimulationState = simulation.SimulationState, Technology = simulation.Technology }; NotifyAll(simulationStateChanged, sim.OriginalSender, Context.Parent); }
private void NotifyAll(SimulationStateChanged simulationStateChanged, params IActorRef[] receivers) { foreach (var receiver in receivers) { receiver.Tell(simulationStateChanged); } _systemActors.SimulationNotifier.Tell(simulationStateChanged); }
private void MoveToStopping(MoveToStopping sim) { var simulation = _simulationQueue.FirstOrDefault(s => s.ProjectId == sim.ProjectId); if (simulation == null) { sim.OriginalSender.Tell(new SimulationNotFound() { ProjId = sim.ProjectId }); return; } if (simulation.SimulationState == SimulationState.WaitingToPause || simulation.SimulationState == SimulationState.WaitingToStop) { sim.OriginalSender.Tell(new SimulationStateChangeIsInvalid() { ProjId = sim.ProjectId, CurrentState = simulation.SimulationState, RequestedState = SimulationState.WaitingToStop }); return; } if (simulation.SimulationState == SimulationState.Waiting) { _simulationQueue.Remove(simulation); var simulationStateChangedToStopped = new SimulationStateChanged() { ProjectId = sim.ProjectId, SimulationState = SimulationState.Stopped, Technology = simulation.Technology }; sim.OriginalSender.Tell(simulationStateChangedToStopped); Context.Parent.Tell(simulationStateChangedToStopped); return; } simulation.SimulationState = SimulationState.WaitingToStop; var simulationStateChanged = new SimulationStateChanged() { ProjectId = sim.ProjectId, SimulationState = simulation.SimulationState, Technology = simulation.Technology }; sim.OriginalSender.Tell(simulationStateChanged); Context.Parent.Tell(simulationStateChanged); }
private void MoveToRunning(MoveToRunning sim) { var simulation = _simulationQueue.FirstOrDefault(s => s.ProjectId == sim.ProjectId); if (simulation == null) { Context.Sender.Tell(new SimulationNotFound { ProjId = sim.ProjectId }); return; } simulation.SimulationState = SimulationState.Running; var simulationStateChanged = new SimulationStateChanged() { ProjectId = sim.ProjectId, SimulationState = simulation.SimulationState, Technology = simulation.Technology }; NotifyAll(simulationStateChanged, Context.Sender, Context.Parent); }
private void MoveToStopped(MoveToStopped toStop) { var simulation = _simulationQueue.FirstOrDefault(s => s.ProjectId == toStop.ProjectId); if (simulation == null) { Sender.Tell(new SimulationNotFound() { ProjId = toStop.ProjectId }); return; } _simulationQueue.Remove(simulation); var simulationStateChanged = new SimulationStateChanged() { ProjectId = toStop.ProjectId, SimulationState = SimulationState.Stopped, Technology = simulation.Technology }; NotifyAll(simulationStateChanged, Context.Parent); }
public void Notify(SimulationStateChanged changeNotification) { Clients.All.SimulationStateChanged(changeNotification); }
private void OnSimulationStateChanged() { SimulationStateChanged?.Invoke(this, new SimulationStateEventArgs(State)); }
/// <summary> /// Trigger for the simulation state change event. /// </summary> public void OnSimulationStateChanged() { SimulationStateChanged?.Invoke(this, EventArgs.Empty); }