예제 #1
0
 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!");
 }
예제 #2
0
        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;
            }
        }
예제 #4
0
        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);
        }