Пример #1
0
        private static void SpawnPassenger(Common.Passenger passenger)
        {
            string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Spawn?type={1}&id={2}&zone={3}&cargo={4}",
                                       Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)passenger.CurrentZone, passenger.CargoCount);

            CommonUtil.MakeRequest(URL);
        }
Пример #2
0
        private static void MovePassenger(Common.Passenger passenger, Zone zone)
        {
            string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Move?type={1}&id={2}&zone={3}",
                                       Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)zone);

            CommonUtil.MakeRequest(URL);
            passenger.State = EntityState.MOVING;
        }
Пример #3
0
        private static void DespawnPassenger(Common.Passenger passenger)
        {
            string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Despawn?id={1}",
                                       Ports.Visualizer, passenger.Id);

            CommonUtil.MakeRequest(URL);
            Passengers.Remove(Passengers.Find(x => x.Id.Equals(passenger.Id)));
        }
Пример #4
0
        public void CompleteMove(string id, int zoneNum)
        {
            Zone zone = (Zone)zoneNum;

            Common.Passenger passenger = PassengerHandler.Passengers.Find(x => x.Id.Equals(id));
            passenger.CurrentZone = zone;
            passenger.State       = EntityState.WAITING_FOR_COMMAND;
        }
Пример #5
0
        private static void RegisterPassenger(Common.Passenger passenger)
        {
            string URL = String.Format("http://localhost:{0}/RegistrationStandService.svc/Register?flightId={1}&passengerId={2}&cargo={3}",
                                       Ports.RegStand, passenger.FlightId, passenger.Id, passenger.CargoCount);
            string result   = Common.CommonUtil.MakeRequest(URL);
            bool   response = JsonConvert.DeserializeObject <bool>(result);

            passenger.RegState = response ? RegistrationState.REGISTERED : RegistrationState.REJECTED;
            passenger.State    = EntityState.WAITING_FOR_COMMAND;
        }
        public string GetPassengerInfo(string id)
        {
            Common.Passenger passenger = new Common.Passenger();
            passenger.CurrentZone = Zone.PASSENGER_SPAWN;
            passenger.CargoCount  = 3;
            passenger.FlightId    = Guid.NewGuid().ToString();
            string result = JsonConvert.SerializeObject(passenger);

            return(result);
        }
Пример #7
0
        public static void HandlePassengers()
        {
            while (true)
            {
                Thread.Sleep(1000);
                lock (Passengers)
                {
                    for (int i = 0; i < Passengers.Count; i++)
                    {
                        Common.Passenger passenger = Passengers[i];

                        // если пассажир выполн¤ет дей¤твие, то пропускаем его
                        if (passenger.State == EntityState.MOVING)
                        {
                            continue;
                        }
                        if (passenger.CurrentZone == Zone.BUS || passenger.CurrentZone == Zone.PLANE)
                        {
                            continue;
                        }

                        //если пассажир на точке спавна в аэропорту
                        if (passenger.CurrentZone == Zone.PASSENGER_SPAWN)
                        {
                            //если пассажир уходит (отказ или прилЄт)
                            if (passenger.RegState == RegistrationState.EXITING || passenger.RegState == RegistrationState.REJECTED || passenger.IsFlyingAway == false)
                            {
                                DespawnPassenger(passenger);
                            }
                            else //если пассажир только по¤вилс¤
                            {
                                SpawnPassenger(passenger);
                                MovePassenger(passenger, Zone.REGISTRATION_STAND);
                            }
                            //continue;
                        }
                        else if (passenger.CurrentZone == Zone.REGISTRATION_STAND)
                        {
                            //если пассажир незарегистрирован
                            if (passenger.RegState == RegistrationState.NOT_REGISTERED)
                            {
                                //если пассажир улетающий
                                if (passenger.IsFlyingAway)
                                {
                                    passenger.State = EntityState.STANDING_BY;
                                    //запрос регистрации
                                    RegisterPassenger(passenger);
                                }
                                else //если пассажир прилетающий
                                {
                                    //TODO: сделать запрос визуализатору на перемещение к спауну
                                    MovePassenger(passenger, Zone.PASSENGER_SPAWN);
//                                    passenger.CurrentZone = Zone.PASSENGER_SPAWN;
//                                    passenger.State = EntityState.WAITING_FOR_COMMAND;
                                }
                            }
                            //если пассажиру отказано в регистрации
                            else if (passenger.RegState == RegistrationState.REJECTED)
                            {
                                //TODO: сделать запрос визуализатору на перемещение к спауну
                                MovePassenger(passenger, Zone.PASSENGER_SPAWN);
//                                passenger.CurrentZone = Zone.PASSENGER_SPAWN;
//                                passenger.State = EntityState.WAITING_FOR_COMMAND;
                            }
                            //если пассажир уже зарегистрирован
                            else if (passenger.RegState == RegistrationState.REGISTERED)
                            {
                                //если пассажир улетающий
                                if (passenger.IsFlyingAway)
                                {
                                    //TODO: сделать запрос визуализатору на движение в зону багажа
                                    MovePassenger(passenger, Zone.CARGO_DROPOFF);
//                                    passenger.CurrentZone = Zone.CARGO_DROPOFF;
//                                    passenger.State = EntityState.WAITING_FOR_COMMAND;
                                }
                                else //если пассажир прилетающий
                                {
                                    MovePassenger(passenger, Zone.PASSENGER_SPAWN);
                                }
                            }
                            //continue;
                        }

                        //пассажир находитс¤ у стойки с багажом
                        if (passenger.CurrentZone == Zone.CARGO_DROPOFF)
                        {
                            //если пассажир улетающий
                            if (passenger.IsFlyingAway)
                            {
                                if (passenger.HoldingCargo)
                                {
                                    passenger.HoldingCargo = false;
                                }
                                else
                                {
                                    MovePassenger(passenger, Zone.WAITING_AREA);
                                }
                            }
                            else //если пассажир прилетающий
                            {
                                if (passenger.HoldingCargo)
                                {
                                    MovePassenger(passenger, Zone.REGISTRATION_STAND);
                                }
                                else
                                {
                                    passenger.HoldingCargo = true;
                                }
                            }
                        }
                        //если пассажир на автобусной остановке
                        else if (passenger.CurrentZone == Zone.BUS_STATION)
                        {
                            //если пассажир прилетающий
                            if (!passenger.IsFlyingAway)
                            {
                                MovePassenger(passenger, Zone.WAITING_AREA);
                            }
                            //continue;
                        }
                        //если пассажир находитс¤ в зоне ожидани¤
                        else if (passenger.CurrentZone == Zone.WAITING_AREA)
                        {
                            //если пассажир зарегистрирован
//                            if (passenger.RegState == RegistrationState.REGISTERED)
//                            {
                            //если пассажир улетающий
                            if (passenger.IsFlyingAway)
                            {
                                // ждём, пока автобус его запросит
                                continue;
                            }
                            else     //прилетающий
                            {
                                var planeStage = CheckPlaneStage(passenger.FlightId);
                                if (planeStage != PlaneServiceStage.UNLOAD_PASSENGERS && planeStage != PlaneServiceStage.UNLOAD_CARGO && planeStage != PlaneServiceStage.REFUEL)
                                {
                                    MovePassenger(passenger, Zone.CARGO_DROPOFF);
                                }
                            }
//                            }
//                            else
//                            {
//                                //так не должно быть
//                                DespawnPassenger(passenger);
//                                Passengers.Remove(Passengers.Find(x => x.Id == passenger.Id));
//                            }
                            //continue;
                        }
                    }
                }
            }
        }
Пример #8
0
        public static void HandlePassengers()
        {
            while (true)
            {
                Thread.Sleep(1000);
                lock (Passengers)
                {
                    for (int i = 0; i < Passengers.Count; i++)
                    {
                        Common.Passenger passenger = Passengers[i];

                        // если пассажир выполн¤ет дей¤твие, то пропускаем его
                        if (passenger.State == EntityState.MOVING)
                        {
                            continue;
                        }

                        //если пассажир на точке спавна в аэропорту
                        if (passenger.CurrentZone == Zone.PASSENGER_SPAWN)
                        {
                            //если пассажир уходит (отказ или прилЄт)
                            if (passenger.RegState == RegistrationState.EXITING || passenger.RegState == RegistrationState.REJECTED)
                            {
                                //TODO: сделать запрос визуализатору DESPAWN
                                string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Despawn?id={1}",
                                                           Ports.Visualizer, passenger.Id);
                                Passengers.Remove(Passengers.Find(x => x.Id == passenger.Id));
                            }
                            else //если пассажир только по¤вилс¤
                            {
                                string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Spawn?type={1}&id={2}&zone={3}&cargo={4}",
                                                           Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)Zone.PASSENGER_SPAWN, passenger.CargoCount);
                                Util.MakeRequest(URL);

                                URL = String.Format("http://localhost:{0}/VisualizerService.svc/Move?type={1}&id={2}&zone={3}",
                                                    Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)Zone.REGISTRATION_STAND);
                                Util.MakeRequest(URL);
                                passenger.State = EntityState.MOVING;

                                //"Move?type={entityNum}&id={id}&zone={zoneNum}")]
                                //                                passenger.CurrentZone = Zone.REGISTRATION_STAND;
                                //                                passenger.State = EntityState.WAITING_FOR_COMMAND;
                            }
                            //continue;
                        }

                        //если пассажир находитс¤ у стойки регистрации
                        if (passenger.CurrentZone == Zone.REGISTRATION_STAND)
                        {
                            //если пассажир незарегистрирован
                            if (passenger.RegState == RegistrationState.NOT_REGISTERED)
                            {
                                //если пассажир улетающий
                                if (passenger.IsFlyingAway)
                                {
                                    passenger.State = EntityState.STANDING_BY;
                                    //запрос регистрации
                                    //TODO: сделать нормально запрос
                                    //сделано
                                    string URL =
                                        String.Format("http://localhost:{0}/RegistrationStandService.svc/Register?flightId={1}&passengerId={2}&cargo={3}",
                                                      Ports.RegStand, passenger.FlightId, passenger.Id, passenger.CargoCount);
                                    string result   = Common.Util.MakeRequest(URL);
                                    bool   response = JsonConvert.DeserializeObject <bool>(result);

                                    passenger.RegState = response ? RegistrationState.REGISTERED : RegistrationState.REJECTED;
                                    passenger.State    = EntityState.WAITING_FOR_COMMAND;
                                }
                                else //если пассажир прилетающий
                                {
                                    //так не должо быть
                                    Common.Util.Log(log,
                                                    "Passenger " + passenger.Id + " is't flying away, but go to registration!");
                                    Passengers.Remove(Passengers.Find(x => x.Id == passenger.Id));
                                    passenger.RegState = RegistrationState.EXITING;
                                    //TODO: сделать запрос визуализатору на перемещение к спауну
                                    string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Move?type={1}&id={2}&zone={3}",
                                                               Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)Zone.PASSENGER_SPAWN);

                                    passenger.State = EntityState.MOVING;
//                                    passenger.CurrentZone = Zone.PASSENGER_SPAWN;
//                                    passenger.State = EntityState.WAITING_FOR_COMMAND;
                                }
                            }

                            //если пассажиру отказано в регистрации
                            if (passenger.RegState == RegistrationState.REJECTED)
                            {
                                passenger.State = EntityState.MOVING;
                                //TODO: сделать запрос визуализатору на перемещение к спауну
                                string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Move?type={1}&id={2}&zone={3}",
                                                           Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)Zone.PASSENGER_SPAWN);
//                                passenger.CurrentZone = Zone.PASSENGER_SPAWN;
//                                passenger.State = EntityState.WAITING_FOR_COMMAND;
                            }

                            //если пассажир уже зарегистрирован
                            if (passenger.RegState == RegistrationState.REGISTERED)
                            {
                                //если пассажир улетающий
                                if (passenger.IsFlyingAway)
                                {
                                    passenger.State = EntityState.MOVING;
                                    //TODO: сделать запрос визуализатору на движение в зону багажа
                                    string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Move?type={1}&id={2}&zone={3}",
                                                               Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)Zone.CARGO_DROPOFF);
                                    Util.MakeRequest(URL);
//                                    passenger.CurrentZone = Zone.CARGO_DROPOFF;
//                                    passenger.State = EntityState.WAITING_FOR_COMMAND;
                                }
                                else //если пассажир прилетающий
                                {
                                    Common.Util.Log(log, "Passenger " + passenger.Id + " removed");
                                    string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Despawn?id={1}",
                                                               Ports.Visualizer, passenger.Id);
                                    Util.MakeRequest(URL);
                                    Passengers.Remove(Passengers.Find(x => x.Id == passenger.Id));
                                }
                            }
                            //continue;
                        }

                        //пассажир находитс¤ у стойки с багажом
                        if (passenger.CurrentZone == Zone.CARGO_DROPOFF)
                        {
                            //если пассажир улетающий
                            if (passenger.IsFlyingAway)
                            {
                                passenger.HoldingCargo = false;
                                string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Move?type={1}&id={2}&zone={3}",
                                                           Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)Zone.WAITING_AREA);
                                Util.MakeRequest(URL);
                                passenger.State = EntityState.MOVING;
                                //TODO: сделать запрос визуализатору на движение в зону ожидания
//                                passenger.CurrentZone = Zone.WAITING_AREA;
//                                passenger.State = EntityState.WAITING_FOR_COMMAND;
                            }
                            else //если пассажир прилетающий
                            {
                                passenger.HoldingCargo = true;

                                //TODO: сделать запрос визуализатору на перемещение к спауну
                                string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Move?type={1}&id={2}&zone={3}",
                                                           Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)Zone.PASSENGER_SPAWN);
                                Util.MakeRequest(URL);
                                passenger.RegState = RegistrationState.EXITING;
                                passenger.State    = EntityState.MOVING;
//                                passenger.CurrentZone = Zone.PASSENGER_SPAWN;
//                                passenger.State = EntityState.WAITING_FOR_COMMAND;
                            }
                            //continue;
                        }

                        //если пассажир на автобусной остановке
                        if (passenger.CurrentZone == Zone.BUS_STATION)
                        {
                            //если пассажир прилетающий
                            if (!passenger.IsFlyingAway)
                            {
                                //TODO: отправить визуализатору SPAWN
                                passenger.State = EntityState.MOVING;
                                //TODO: сделать запрос визуализатору на движение в зону ожидани¤
                                passenger.CurrentZone = Zone.WAITING_AREA;
                                passenger.State       = EntityState.WAITING_FOR_COMMAND;
                            }
                            //continue;
                        }

                        //если пассажир находитс¤ в зоне ожидани¤
                        if (passenger.CurrentZone == Zone.WAITING_AREA)
                        {
                            //если пассажир зарегистрирован
                            if (passenger.RegState == RegistrationState.REGISTERED)
                            {
                                //если пассажир улетающий
                                if (passenger.IsFlyingAway)
                                {
//                                    passenger.State = EntityState.MOVING;
                                    //TODO: запрос визуализатору на движение куда-то в аэропорту
//                                    passenger.State = EntityState.WAITING_FOR_COMMAND;

                                    //////////////////////////////////////////////////////////////////////////
                                    /// тут будет с появлением автобуса

                                    passenger.IsFlyingAway = false;
                                    passenger.RegState     = RegistrationState.EXITING;


                                    //////////////////////////////////////////////////////////////////////////
                                    continue;
                                }
                                else //прилетающий
                                {
                                    //TODO: сделать запрос визуализатору на движение к выдаче багажа
                                    string URL = String.Format("http://localhost:{0}/VisualizerService.svc/Move?type={1}&id={2}&zone={3}",
                                                               Ports.Visualizer, (int)Entity.PASSENGER, passenger.Id, (int)Zone.CARGO_DROPOFF);
                                    Util.MakeRequest(URL);
                                    passenger.State = EntityState.MOVING;
//                                    passenger.CurrentZone = Zone.CARGO_DROPOFF;
//                                    passenger.State = EntityState.WAITING_FOR_COMMAND;
                                }
                            }
                            else
                            {
                                //так не должно быть
                                Common.Util.Log(log, "Passenger " + passenger.Id + " in waiting_area, but not registered!");
                                Passengers.Remove(Passengers.Find(x => x.Id == passenger.Id));
                            }
                            //continue;
                        }
                    }
                }
            }
        }