public static Buffer orderBuffer = new Buffer(); //creating an object of the Buffer class #endregion Fields #region Methods static void Main(string[] args) { Hotel[] hotels = new Hotel[HOTEL_COUNT]; // creating the object of the hotel class Thread[] hotelThreadsToStart = new Thread[HOTEL_COUNT]; //creating the thread object of the hotel Agency[] agencies = new Agency[AGENCY_COUNT]; //creating the object of the travel agency Thread[] agencyThreadsToStart = new Thread[AGENCY_COUNT];//creating the thread object of the agent bankService.Service1Client apply_service = new bankService.Service1Client(); //creating client for bank service OrderDispatcher orderDispatcher = new OrderDispatcher(); Thread orderDispatcherThread = new Thread(orderDispatcher.processOrderQueue); //initialising the price cut thread for (int i = 0; i < HOTEL_COUNT; i++) { hotels[i] = new Hotel(); hotels[i].HotelId = i; Thread hotelPriceCutThread = new Thread(hotels[i].calculateNewRoomRate); hotelThreadsToStart[i] = hotelPriceCutThread; //creating a delegate for the the OrderDispatcher class OrderDispatcher.orderReceivedEvent += new OrderDispatcher.orderEventDelegate(hotels[i].handleOrderReceivedEvent); } //initialising the bank service thread connecting to the travel agency for (int i = 0; i < AGENCY_COUNT; i++) { agencies[i] = new Agency(); agencies[i].AgencyId = i; int ccNumber = apply_service.applyCCNumber(); //providing agency with a new credit card number by calling bank service agencies[i].AgencyCardNo = ccNumber; agencyThreadsToStart[i] = new Thread(agencies[i].agencyThreadMain); Hotel.priceCutEvent += new Hotel.hotelEventDelegate(agencies[i].handlePriceCutEvent); Hotel.orderCompletedEvent += new Hotel.orderCompletedEventDelegate(agencies[i].handleOrederCompletedEvent); } //starting the travel agency thread for (int i = 0; i < AGENCY_COUNT; i++) { agencyThreadsToStart[i].Start(); } orderDispatcherThread.Start(); //starting the hotel threads for (int i = 0; i < HOTEL_COUNT; i++) { hotelThreadsToStart[i].Start(); } }
//method for processing the order public void processSingleOrder(string orderString) { string[] lines = Regex.Split(orderString, "::"); int agencyId = Convert.ToInt32(lines[0]); int hotelId = Convert.ToInt32(lines[1]); int agencyCardNo = Convert.ToInt32(lines[2]); int noOfRooms = Convert.ToInt32(lines[3]); //calling encryption service and encrypting the credit card number encryptService.ServiceClient encrypt_client = new encryptService.ServiceClient(); string ccNumber = agencyCardNo.ToString(); string encrypted_ccNumber = encrypt_client.Encrypt(ccNumber); //verification of the credit card number by the bank service bankService.Service1Client bank_client = new bankService.Service1Client(); string validation = bank_client.validateCCNumber(encrypted_ccNumber); if (validation == "valid") { Console.WriteLine("Hotel[" + hotelId.ToString() + "]: " + "Processing Single Order: " + orderString); if (orderCompletedEvent != null) { //checks if no of rooms ordered greater than available rooms if (noOfRooms > totalNoRooms) { Console.WriteLine("Sorry.Rooms Not available in hotel[" + hotelId.ToString() + "]" + " for order by agency[" + agencyId.ToString() + "]"); } else { totalNoRooms = totalNoRooms - noOfRooms; Console.WriteLine("Hotel[" + hotelId.ToString() + "]:" + "Rooms available: " + totalNoRooms); orderCompletedEvent(agencyId, hotelId); } } } else { Console.WriteLine("The credit card number is not valid.Denied placing the order"); } }