public override void SimulationIsTerminating(Simulation sim) { foreach (var item in _collectorRefs) { item.Ask(message: UpdateLiveFeed.Create(setup: true, target: _inbox.Receiver) , timeout: TimeSpan.FromHours(value: 1)).Wait(); } sim.ActorSystem.Terminate().Wait(); _logger.Log(LogLevel.Info, $"Simulation run for { sim.ActorSystem.Uptime } and ended!"); }
public override void AfterSimulationStopped(Simulation sim) { var tasks = new List <Task>(); foreach (var item in _collectorRefs) { var msg = UpdateLiveFeed.Create(setup: false, target: _inbox.Receiver); _logger.Log(LogLevel.Info, $"Ask for Update Feed {item.Path.Name}"); tasks.Add(item.Ask(message: msg, timeout: TimeSpan.FromSeconds(value: 60 * 60))); } Task.WaitAll(tasks.ToArray()); }
public static void Continuation(Inbox inbox, Simulation sim, List <IActorRef> collectors) { var something = inbox.ReceiveAsync(timeout: TimeSpan.FromHours(value: 1)).Result; switch (something) { case SimulationMessage.SimulationState.Started: System.Diagnostics.Debug.WriteLine(message: "AKKA:START AGENT SYSTEM", category: "AKKA-System:"); Continuation(inbox: inbox, sim: sim, collectors: collectors); break; case SimulationMessage.SimulationState.Stopped: System.Diagnostics.Debug.WriteLine(message: "AKKA:STOP AGENT SYSTEM", category: "AKKA-System:"); var tasks = new List <Task>(); tasks.Add(Logger.WriteToFile()); foreach (var item in collectors) { var msg = UpdateLiveFeed.Create(setup: false, target: inbox.Receiver); System.Diagnostics.Debug.WriteLine($"Ask for Update Feed {item.Path.Name}"); tasks.Add(item.Ask(message: msg, timeout: TimeSpan.FromSeconds(value: 60 * 60))); } Task.WaitAll(tasks.ToArray()); sim.Continue(); Continuation(inbox: inbox, sim: sim, collectors: collectors); break; case SimulationMessage.SimulationState.Finished: System.Diagnostics.Debug.WriteLine(message: "SHUTDOWN AGENT SYSTEM", category: "AKKA-System:"); foreach (var item in collectors) { var waitFor = item.Ask(message: UpdateLiveFeed.Create(setup: true, target: inbox.Receiver), timeout: TimeSpan.FromHours(value: 1)).Result; } sim.ActorSystem.Terminate().Wait(); break; default: break; } }
public override void AfterSimulationStopped(Simulation sim) { var tasks = new List <Task>(); foreach (var item in _collectorRefs) { var msg = UpdateLiveFeed.Create(setup: false, target: _inbox.Receiver); _logger.Log(LogLevel.Info, $"Ask for Update Feed {item.Path.Name}"); tasks.Add(item.Ask(message: msg, timeout: TimeSpan.FromSeconds(value: 60 * 60))); } var hubActorRef = sim.ActorSystem.ActorSelection("/user/HubDirectory/CentralHub").ResolveOne(TimeSpan.FromSeconds(60)).Result; var instruction = Hub.Instruction.Central.LoadProductionOrders.Create(_inbox.Receiver, hubActorRef); sim.SimulationContext.Tell(instruction); Task.WaitAll(tasks.ToArray()); //TODO might need to extend timespan var results = _inbox.ReceiveWhere(x => x is FCentralGanttPlanInformation, TimeSpan.FromSeconds(60 * 60)) as FCentralGanttPlanInformation; _messageHub.SendToClient("ganttListener", results.InfoJson); }