public void processOrder()
        {
            encryptionServiceClient = new EncryptionService.ServiceClient();
            bankServiceClient = new BankService.Service1Client();

            String validatedCardDetails;

            if ((hotel.NoOfRoom - order.Amount) >= 0)
            {

               String encryptedCardNo = encryptionServiceClient.Encrypt(order.CardNo);
                try
                {
                    validatedCardDetails = bankServiceClient.validateCard(encryptedCardNo);
                }
                catch (Exception exp)
                {
                    validatedCardDetails = "Card number not verified";
                    Console.WriteLine("Card number not verified");
                }

                if (validatedCardDetails.Equals("valid"))
                {
                    hotel.NoOfRoom = hotel.NoOfRoom - order.Amount;
                    order.OrderPrice = hotel.getPrice() * order.Amount + hotel.getTaxPercentage() * hotel.getPrice() * order.Amount + hotel.getLocationCharge();
                    Console.WriteLine("Order Processed:" + counter + " || Ordering Parties: " + order.SenderId + "-> " + order.ReceiverId + " || No of rooms requested:" + order.Amount + "|| Price charged:" + order.OrderPrice + " || Rooms remaining:" + hotel.NoOfRoom);
                    counter++;

                }
                else
                {
                    Console.WriteLine("Order Rejected:" + counter +  " || Ordering Parties: " + order.SenderId + "-> " + order.ReceiverId + "|| No of rooms requested:" + order.Amount + "|| Reason: Rooms not available");
                    counter++;
                }
            }
            else
            {
                Console.WriteLine("Order Rejected:" + counter + " || Ordering Parties: " + order.SenderId + "-> " + order.ReceiverId + "|| No of rooms requested:" + order.Amount + "|| Reason: Rooms not available");
                counter++;
            }

            Boolean b = true;
            while (b)
            {

                if (Program.processedOrder.getBuffer(order.SenderId) == null)
                {
                    lock (Program.processedOrder)
                    {
                        Program.processedOrder.setBuffer(order.SenderId + "and" + order.ReceiverId);
                        b = false;

                    }
                }
            }
        }
        public void run()
        {
            while (true)
            {

                Thread.Sleep(500);
                //Aborting Threads after the hotel supplier thread has stopped running
              if (totalRuns == maxRuns)
                {

                    manualReset.Set();
                    agencyCount++;
                    Thread.CurrentThread.Abort();

                }

              manualReset.WaitOne();

                if (totalRuns == maxRuns)
                {

                    agencyCount++;
                    if (agencyCount == 4)
                    {
                        try
                        {
                            Console.WriteLine("Program ran successfully");
                            Console.ReadLine();
                        }
                        catch
                        {

                        }
                    }
                    Thread.CurrentThread.Abort();
                }

                bankServiceClient = new BankService.Service1Client();
                OrderClass order = new OrderClass();
                order.ReceiverId = supplierName;
                order.SenderId = Thread.CurrentThread.Name;

                // order amount based on the previos price and the new price
                if(previousPrice<newPrice)
                {
                    order.Amount = random.Next(1, 10);
                }

                else
                {
                    order.Amount = random.Next(10, 15);
                }

                while ( order.CardNo == null || "".Equals(order.CardNo))
                {
                    order.CardNo = Convert.ToString(bankServiceClient.getCard());
                    if(order.CardNo.Equals('0'))
                    {
                        Console.WriteLine("Card will be issued after checking the available card numbers");
                    }
                }

                //placing order in the buffer after encoding
                Boolean b = true;
                DateTime time = DateTime.Now;
                while (b)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        if (Program.buffer[i].getBuffer("temp") == null)
                        {
                            lock (Program.buffer[i])
                            {
                                time = DateTime.Now;
                                Program.buffer[i].setBuffer(new Encoder().encode(order));
                                b = false;
                            }

                            break;
                        }

                    }
                }

                //checking the processed order;
                b = true;
                Thread.Sleep(500);
                string orderString = order.SenderId + "and" + order.ReceiverId;

                while (b)
                {
                    if (Program.processedOrder.getBuffer(orderString) != null)
                    {
                        Console.WriteLine("Time taken to process the order is :" + (DateTime.Now - time).TotalSeconds + " seconds");
                        b = false;

                    }
                    else
                        Thread.Sleep(500);
                }

                manualReset.Reset();

                totalRuns++;

            }
        }