public void Start() { MqClient.DeclareQueues(queues.ToArray()); MqClient.PurgeQueues(queues.ToArray()); Task.Run(() => { while (true) { while (passengersRequests.TryDequeue(out var request)) { DelaySource.CreateToken().Sleep(PASS_TIME_MS); PassPassengers(request.BusId, request.FlightId, request.Capacity); } passengersResetEvent.WaitOne(); } }); Task.Run(() => { while (true) { while (baggageRequests.TryDequeue(out var request)) { DelaySource.CreateToken().Sleep(BAGGAGE_TIME_MS); PassBaggage(request.CarId, request.FlightId, request.Capacity); } baggageResetEvent.WaitOne(); } }); MqClient.SubscribeTo <NewTimeSpeedFactor>(timeStorage, (mes) => { DelaySource.TimeFactor = mes.Factor; }); MqClient.SubscribeTo <PassengerStoragePass>(regStorage, (mes) => { Console.WriteLine($"Received from Registration: {mes.FlightId} - {mes.PassengerId}"); AddPassenger(mes.FlightId, mes.PassengerId); }); MqClient.SubscribeTo <BaggageStoragePass>(regStorageBaggage, (mes) => { Console.WriteLine($"Received from Registration: {mes.FlightId} + 1 baggage"); AddBaggage(mes.FlightId); }); MqClient.SubscribeTo <PassengersFromStorageRequest>(busStorage, (mes) => { Console.WriteLine($"Received from Bus: {mes.BusId}, {mes.FlightId}, {mes.Capacity}"); passengersRequests.Enqueue(mes); passengersResetEvent.Set(); }); MqClient.SubscribeTo <BaggageFromStorageRequest>(baggageStorage, (mes) => { Console.WriteLine($"Received from Baggage car: {mes.CarId}, {mes.FlightId}, {mes.Capacity}"); baggageRequests.Enqueue(mes); baggageResetEvent.Set(); }); }
public void Start() { MqClient.DeclareQueues(queues.ToArray()); MqClient.PurgeQueues(queues.ToArray()); MqClient.SubscribeTo <NewTimeSpeedFactor>(timeReg, (mes) => { DelaySource.TimeFactor = mes.Factor; }); MqClient.SubscribeTo <FlightStatusUpdate>(scheduleReg, (mes) => { Console.WriteLine($"Received from Schedule: {mes.FlightId} - {mes.Status}"); UpdateFlightStatus(mes.FlightId, mes.Status); }); Task.Run(() => { while (true) { checkInEvent.WaitOne(); while (checkInRequests.TryDequeue(out var request)) { DelaySource.CreateToken().Sleep(REG_TIME_MS); Registrate( request.PassengerId, request.FlightId, request.HasBaggage, request.FoodType ); } } }); MqClient.SubscribeTo <CheckInRequest>(pasReg, (mes) => { Console.WriteLine($"Received from Passenger: {mes.PassengerId}, {mes.FlightId}, {mes.HasBaggage}, {mes.FoodType}"); checkInRequests.Enqueue(mes); checkInEvent.Set(); }); // Ответ кассы MqClient.SubscribeTo <CheckTicketResponse>(cashReg, (mes) => { lock (PasList) { var match = PasList.Find(e => (e.PassengerId == mes.PassengerId)); if (match != null) { if (mes.HasTicket) // Если билет верный { MqClient.Send(regPas, new CheckInResponse() { PassengerId = mes.PassengerId, Status = CheckInStatus.Registered } ); Console.WriteLine($"Sent to Passenger: {mes.PassengerId}, {CheckInStatus.Registered}"); Task.Run(() => { PassToTerminal(match.PassengerId, match.FlightId, match.HasBaggage, match.FoodType); }); } else // Если билет неверный { MqClient.Send(regPas, new CheckInResponse() { PassengerId = mes.PassengerId, Status = CheckInStatus.WrongTicket } ); Console.WriteLine($"Sent to Passenger: {mes.PassengerId}, {CheckInStatus.WrongTicket}"); } PasList.Remove(match); } } }); //MqClient.Dispose(); }