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