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);
        }
Example #7
0
 public void Notify(SimulationStateChanged changeNotification)
 {
     Clients.All.SimulationStateChanged(changeNotification);
 }
Example #8
0
 private void OnSimulationStateChanged()
 {
     SimulationStateChanged?.Invoke(this, new SimulationStateEventArgs(State));
 }
Example #9
0
 /// <summary>
 ///     Trigger for the simulation state change event.
 /// </summary>
 public void OnSimulationStateChanged()
 {
     SimulationStateChanged?.Invoke(this, EventArgs.Empty);
 }