public DeicingCar(int id) { LocationVertex = RandomHomeVertex.GetHomeVertex(); DeicingCarID = "Deicing-" + id; MotionPermitted = false; Status = Status.Free; }
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(); }); }