/// <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(); } }
/// <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); }