public static OrderClass getDecodedValue(string encodedString)
        {
            string mergedString = encodedString;//Decrypt(encodedString, "ABCDEFGHIJKLMNOP");
            string[] tokens = mergedString.Split('#');
            OrderClass OrderClass = new OrderClass();

            if (tokens.Length != 5)    // String is not communicated properly
            {
                Console.WriteLine("Parameter missmatch");
                OrderClass.setCreditCardNumber("-1");
                OrderClass.setRoomPrice(-1);
                OrderClass.setNumberOfRooms(-1);
                OrderClass.setSenderID(-1);
                OrderClass.setReceiverID(-1);
            }
            else
            {
                OrderClass.setCreditCardNumber(tokens[0]);
                OrderClass.setRoomPrice(Int32.Parse(tokens[1]));
                OrderClass.setNumberOfRooms(Int32.Parse(tokens[2]));
                OrderClass.setSenderID(Int32.Parse(tokens[3]));
                OrderClass.setReceiverID(Int32.Parse(tokens[4]));
            }

            return OrderClass;
        }
        /*
         * 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);
 }