示例#1
0
        /// <summary>
        /// Delegate function to cancel reservation
        /// this function will delegate the reservation ID to the appropriate seller.
        /// if seller doesn't exist or reservation ID is invalid an exception will be thrown
        /// </summary>
        /// <param name="seller">Seller to delegate this request</param>
        /// <param name="reservationID">re</param>
        public void CancelReservation(string seller, string reservationID)
        {
            int resID;

            try
            {
                resID = Convert.ToInt32(reservationID);
            }
            catch (FormatException)
            {
                throw new FlightSearchServerReservationMalformed(); //FlightSearchServerException("bad reservation ID: " + e.Message);
            }
            if (!sellers.ContainsKey(seller))
            {
                throw new FlightSearchServerSellerNotFound();
            }

            FlightSearchReservationRequest fsrr =
                new FlightSearchReservationRequest();

            try
            {
                sellers[seller].CancelReservation(resID);
            }
            catch (FaultException e)
            {
                if (e.Reason.ToString().Equals("no such reservation"))
                {
                    throw new FlightSearchServerReservationNotFound();
                }
                else
                {
                    throw new FlightSearchServerException(e.Reason.ToString());
                }
            }
            catch (CommunicationException e)
            {
                Console.WriteLine("==================== Cancel reservation - BEGIN =====================");
                Console.WriteLine("Seller {0} Communication error, dropping him from FlightSearch.", seller);
                Console.WriteLine(e.Message.ToString());
                Console.WriteLine("==================== Cancel reservation - END =======================");
                ITicketSellingQueryService victim;
                sellers.TryRemove(seller, out victim);
                throw new FlightSearchServerSellerDropped();
            }
            catch (Exception e)
            {
                Console.WriteLine("Seller {0} {1} malfunction: \n{2}", seller, "Cancel reservation", e.Message.ToString());
                ITicketSellingQueryService victim;
                sellers.TryRemove(seller, out victim);
                throw new FlightSearchServerSellerDropped();
            }
        }
示例#2
0
        /// <summary>
        /// Delegate function to make reservation.
        /// this function will make a reservation with the requested seller
        /// if seller doesn't exist or ReservationRequest is invalid on seller's
        /// server an excetion will be throwed.
        /// </summary>
        /// <param name="seller">Seller to order from</param>
        /// <param name="request">Request parameters to the sellers</param>
        /// <returns>sucessfull reservation ID</returns>
        public int MakeReservation(string seller, ReservationRequest request)
        {
            if (!sellers.ContainsKey(seller))
            {
                throw new FlightSearchServerSellerNotFound();
            }

            FlightSearchReservationRequest fsrr =
                new FlightSearchReservationRequest();

            // Prepare data
            fsrr.date         = request.date;
            fsrr.flightNumber = request.flightNumber;

            int reservationID = 0;

            try
            {
                reservationID = sellers[seller].MakeReservation(fsrr);
            }
            catch (FaultException e)
            {
                //throw new FlightSearchServerException(e.Reason.ToString());

                /* We should differentiate between two types of error:
                 * 1. Request wasn't found (no such flight exists) - 404
                 * 2. Flight is fully booked - 403 ("The server understood the request, but is refusing to fulfill it")
                 * - Using strings here was worng
                 */
                if (e.Reason.ToString().Equals("no such flight"))
                {
                    throw new FlightSearchServerFlightNotFound();
                }
                else if (e.Reason.ToString().Equals("no seats available"))
                {
                    throw new FlightSearchServerNoSeats();
                }
                else
                {
                    throw new FlightSearchServerException(e.Reason.ToString()); // Legacy
                }
            }
            catch (CommunicationException e) /* This MIGHT look redundant but its NOT, these are different kinds of errors */
            {
                Console.WriteLine("==================== Make reservation - BEGIN =====================");
                Console.WriteLine("Seller {0} Communication error, dropping him from FlightSearch.", seller);
                Console.WriteLine(e.Message.ToString());
                Console.WriteLine("==================== Make reservation - END =======================");
                ITicketSellingQueryService victim;
                sellers.TryRemove(seller, out victim);
                throw new FlightSearchServerSellerDropped();
            }
            catch (Exception e)
            {
                Console.WriteLine("Seller {0} {1} malfunction: \n{2}", seller, "Make reservation", e.Message.ToString());
                ITicketSellingQueryService victim;
                sellers.TryRemove(seller, out victim);
                throw new FlightSearchServerSellerDropped();
            }
            return(reservationID);
        }