// Travel agency's thread method public void runTravelAgency() { Console.Write("\n {0} is inside runTravelAgency() ", Thread.CurrentThread.Name); // declaring some variables that would be local to each thread DateTime orderTimeStamp; for (int i = 0; i < 70; i++) { Thread.Sleep(800); // travel agency is event driven, hence checking if an event occurred only then proceeding with creating order if (hasPriceCutEventHappened) { OrderClass orderObject = new OrderClass(); orderObject.SenderId = Thread.CurrentThread.Name; orderObject.CardNo = cardNo; orderObject.ReceiverID = receiverId; orderObject.NumTickets = numOfTickets; orderObject.UnitPrice = ticketUnitPrice; String orderString = EncoderDecoderClass.encodeOrderObject(orderObject); System.Console.WriteLine(" {0} built order: {1}", Thread.CurrentThread.Name, orderString); // saving timestamp of the order before sending it to buffer orderTimeStamp = DateTime.Now; // travel agency sends the encoded string to one of the free cells in buffer buffer.addToBuffer(orderString); // setting the flag as false as the order for this event has been added to buffer hasPriceCutEventHappened = false; } } }
// Event handler for order confirmation event public void orderConfirmationEventHandler(OrderClass confirmedOrder, double totalAmountCharged) { lock (confirmBufferLock) { Console.WriteLine("-------------Successfully Placed Follwoing Order------------- :\n\n"); Console.WriteLine("Agency :" + confirmedOrder.SenderId); Console.WriteLine("AirLine :" + confirmedOrder.ReceiverID); Console.WriteLine("Number Of Tickets:" + confirmedOrder.NumTickets); Console.WriteLine("Unit Price :" + confirmedOrder.UnitPrice); Console.WriteLine("Total Price :" + totalAmountCharged + "\n\n"); } }