Exemplo n.º 1
0
 public DeicingCar(int id)
 {
     LocationVertex  = RandomHomeVertex.GetHomeVertex();
     DeicingCarID    = "Deicing-" + id;
     MotionPermitted = false;
     Status          = Status.Free;
 }
Exemplo n.º 2
0
        private void MessageFromGroundService()
        {
            mqClient.SubscribeTo <ServiceCommand>(queueFromGroundService, (sc) =>
            {
                Console.WriteLine(DateTime.Now + " " + Component.Deicing + " Получил сообщение от СНО");
                DeicingCar car = SearchFreeCar();
                Console.WriteLine($"нашли свободную машину {car.DeicingCarID}");
                Task t = new Task(() =>
                {
                    //приехать к самолёту
                    GoPath(GoToVertexAlone, car, sc.PlaneLocationVertex);
                    Console.WriteLine($"{DateTime.Now} {car.DeicingCarID} приехала к самолёту");

                    //чистим самолёт от льда
                    WorkWithPlane(sc.PlaneId);
                    Console.WriteLine($"{DateTime.Now} {car.DeicingCarID} почистила самолёт");

                    ServiceCompletionMessage deicingCompletion = new ServiceCompletionMessage()
                    {
                        PlaneId   = sc.PlaneId,
                        Component = Component.Deicing
                    };

                    mqClient.Send <ServiceCompletionMessage>(queueToGroundService, deicingCompletion);
                    Console.WriteLine($"{DateTime.Now} {car.DeicingCarID} отправила сообщение СНО");

                    var source = new CancellationTokenSource();     //adds token and remove it after went home/new cmd
                    tokens.TryAdd(car.DeicingCarID, source);
                    //уезжаем на стоянку
                    GoPathHome(car, RandomHomeVertex.GetHomeVertex(), tokens[car.DeicingCarID]);
                    if (!tokens[car.DeicingCarID].IsCancellationRequested)     //если не было отмены пути домой
                    {
                        Console.WriteLine($"{DateTime.Now} {car.DeicingCarID} приехала домой");
                    }
                    tokens.Remove(car.DeicingCarID, out source);
                });

                carTasks.TryAdd(car.DeicingCarID, t);
                t.Start();
            });
        }