Exemple #1
0
        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();
            });
        }
Exemple #2
0
        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();
        }