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");
            }
        }