public static void retalierFunc()
        {
            while (true)
            {
                Order orderObj = new Order();
                orderObj.setSenderId(Thread.CurrentThread.Name);
                orderObj.setCardNum(rng.Next(4800, 6999));

                rw.AcquireReaderLock(Timeout.Infinite);
                try{

                    if (flag)  //flag value is based on event. So Retilers actions are based on pricecut event
                    {
                        orderObj.setNumOfChicken(rng.Next(50, 70));
                    }
                    else
                    {
                        orderObj.setNumOfChicken(rng.Next(10, 20));
                    }
                }
                finally { rw.ReleaseReaderLock(); }

                orderObj.setStartTime(DateTime.Now.TimeOfDay);
                string encodedObject = Encoder.convertObjectToString(orderObj);

                MultiBufferCell.setOneCell(encodedObject);

                Console.WriteLine("{0} gave an order of {1} chickens", Thread.CurrentThread.Name, orderObj.getNumOfChicken());
                Thread.Sleep(750);
            }
        }
        public static String convertObjectToString(Order orderObj)
        {
            String encodedOrder;
            encodedOrder = orderObj.getSenderId() + "#" + orderObj.getCardNum().ToString() + "#" + orderObj.getNumOfChicken().ToString()+"#"+orderObj.getStartTime();
            
            return encodedOrder;            

        }
        public static Order convertStringToObject(String encodedOrder)
        {
            Order decodedOrderObj = new Order();
            try
            {                        
            String[] orderVariables = encodedOrder.Split('#');
            decodedOrderObj.setSenderId(orderVariables[0]);
            decodedOrderObj.setCardNum(int.Parse(orderVariables[1]));
            decodedOrderObj.setNumOfChicken(int.Parse(orderVariables[2]));
            decodedOrderObj.setStartTime (TimeSpan.Parse(orderVariables[3]));           
                }
            catch(Exception e)
            {

            }
            return decodedOrderObj;
        }
        public static void processOrder(Order decodedOrderObj,int chickenPrice)
        {
            if(validCardNumber(decodedOrderObj)) //validing the credit card number given by the retiler
            {

                int billingAmount=(decodedOrderObj.getNumOfChicken()*chickenPrice)*(1+(taxPercentage/100)+(shippingChargePercentage/100));
                decodedOrderObj.setEndTime(DateTime.Now.TimeOfDay);
                decodedOrderObj.message="       "+decodedOrderObj.getSenderId()+" is notified after processing order of "+decodedOrderObj.getNumOfChicken()+" chicken requested at "+decodedOrderObj.getStartTime()+" and  billing amount is $"+billingAmount+" now time is "+decodedOrderObj.getEndTime();

            }
            else
            {

                decodedOrderObj.message = "     " +decodedOrderObj.getSenderId() + " is notified after processing order of " + decodedOrderObj.getNumOfChicken() + " chicken requested at "+decodedOrderObj.getStartTime()+". This order is discarded because of invalid card number" + " now time is " + decodedOrderObj.getEndTime();

            }

            ChickenFarm.orderProcessReceipt(decodedOrderObj);
        }
 public static Boolean validCardNumber(Order decodedOrderObj)
 {
     if(decodedOrderObj.getCardNum()>5000 && decodedOrderObj.getCardNum()<7000)
     return true;
     else return false;
 }
 public static void orderProcessReceipt(Order processedObj)
 {
     Console.WriteLine(processedObj.message);
 }