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++;
     }
 }