public static string getEncodedValue(OrderClass OrderClass) { // Create the concatenated string i.e. encoded string string encodedString = OrderClass.getCreditCardNumber() + "#" + OrderClass.getRoomPrice() + "#" + OrderClass.getNumberOfRooms() + "#" + OrderClass.getSenderID() + "#" + OrderClass.getReceiverID(); return encodedString ; }
/* * Generate and place orders from TravelAgency Randomly */ public void agency() { for (int i = 0; i < 2; i++) { Random random = new Random(); int r = random.Next(0, 2); OrderClass order = new OrderClass(); order.setCreditCardNumber(TransactionAgency.validCreditCard[random.Next(0, 2)]); order.setRoomPrice(price[r]); order.setNumberOfRooms(random.Next(1, 5)); order.setSenderID(tID); order.setReceiverID(r); string value = EncoderDecoder.getEncodedValue(order); lock (this) { Monitor.Enter(MainSystem.mcb); try { value = value +"?"+ DateTime.Now.Ticks; //append timestamp to order object MainSystem.mcb.setOneCell(value); Console.WriteLine("\n-----------------------------------------------------------------------"); Console.WriteLine("TravelAgency {0}=>\nOrder Details: \n\tRoomPrice:{1} \n\tNumberOfRooms:{2}", order.getSenderID(), order.getRoomPrice(), order.getNumberOfRooms()); Console.WriteLine("Order is initiated successfully for Hotel: " + order.getReceiverID()); Console.WriteLine("-----------------------------------------------------------------------"); MainSystem.placed++; } finally { Monitor.Exit(MainSystem.mcb); } } Thread.Sleep(600); } }
// Function to check buffer repeatedly for entries public void hotelFunction() { do { Monitor.Enter(MainSystem.mcb); try { for (int i = 0; i < 2; i++) // Check all 2 entries { string encodedString = MainSystem.mcb.getOneCell(i, hotelID); string[] stringTokens = null; if(encodedString != null) stringTokens = encodedString.Split('?'); if (stringTokens != null && stringTokens[0] != null) // If entry found { orderObject = EncoderDecoder.getDecodedValue(stringTokens[0]); orderObject.setCreditCardNumber((client.Encrypt(orderObject.getCreditCardNumber().ToString()))); var t = new Thread(() => orderProcessing(orderObject, orderObject.getRoomPrice(), stringTokens[1])); // Start processing order Console.WriteLine("\n======================================================================"); Console.WriteLine("Order Received for the Hotel :"+ orderObject.getReceiverID()); Console.WriteLine("TravelAgency:{0}, RoomPrice:{1}, NumberOfRooms:{2}", orderObject.getSenderID(), orderObject.getRoomPrice(), orderObject.getNumberOfRooms()); Console.WriteLine("======================================================================"); t.Start(); t.Join(); } } } finally { Monitor.Exit(MainSystem.mcb); } Thread.Sleep(1000); } while (iterations != 100); }
/* * This event handler checks the order status */ public void RoomStatus(Boolean success, OrderClass oObject, String timeStamp) { DateTime dt1 = new DateTime(Convert.ToInt64(timeStamp)); DateTime dt2 = DateTime.Now; if (oObject.getSenderID() == tID && success) { Console.WriteLine("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); Console.WriteLine("Room Booking is done successfully at HotelID:{0}", oObject.getReceiverID()); Console.WriteLine("Order Details: \n\tTravelAgency:{0} \n\tRoomPrice:{1} \n\tNumberOfRooms:{2}", oObject.getSenderID(), oObject.getRoomPrice(), oObject.getNumberOfRooms()); Console.WriteLine("Total Cost: $" + (oObject.getRoomPrice() * oObject.getNumberOfRooms() + 0.12 * (oObject.getRoomPrice() * oObject.getNumberOfRooms()))); Console.WriteLine("Time span for completion of the order:" + dt2.Subtract(dt1)); Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); MainSystem.notified++; } if (oObject.getSenderID() == tID && !success) { Console.WriteLine("\n\t\tRoom not booked at Hotel: " + oObject.getReceiverID()); Console.WriteLine("\t\tTravelAgency:{0}, UnitPrice:{1}, NumberOfUnit:{2}\n", oObject.getSenderID(), oObject.getRoomPrice(), oObject.getNumberOfRooms()); MainSystem.notified++; } }