public void OrderProcessingFunc() { // request = "-1"; try { // while (request.Equals("-1")) // Take the order form the queue Monitor.Enter(Mainapp.Buffer); // Acquire lock on Buffer object request = Mainapp.Buffer.getOneCell(); // Get the order in form of the string } finally { Monitor.Exit(Mainapp.Buffer); } // Release lock on Buffer object OrderClass order = Decoder.Decode(request); // Convert string to object of type OrderClass Tax = r.Next(1, 10); LocationCharge = r.Next(10, 150); if (order.getCreditCard() >= 30000 && order.getCreditCard() <= 70000) // Check whether credit card id valid { Thread.Sleep(r.Next(1, 3000)); Console.WriteLine(); Console.WriteLine("-----------------------------------------------------------------------------------------------------------------------------"); Console.WriteLine("Order from the Dealer " + order.getSenderID() + " has been processed"); Int32 price = order.getUnitPrice() * order.getAmount(); // Calculate the final amount float final_amount = price + (float)Tax / 100 * price + LocationCharge; Console.WriteLine("Total number of cars:" + order.getAmount() + " Unit Price:" + order.getUnitPrice() + " $k" + " Tax: " + (float)Tax / 100 * price + " LocationCharge: " + LocationCharge + " Total amount:" + final_amount + " $k"); // Print the final amount and order detailss Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------"); } else { Console.WriteLine("Credit card details are incorrect"); } }
public void DealerFunc() { need = r1.Next(1200, 3000); // The number of cars needed by each Dealer is selected using random function while (Mainapp.price_cut_count < 20) // Mainapp.price_cut_count keeps track of number of price cuts { cut_event.WaitOne(); // Checking for price-cut event if (need > 0 && Math.Abs(Unit_Price - previous_cut) < diff[ID]) // Place an order if number of cars required by a dealer is greater than one and Maximum difference between the previous price and the current price is within limit { Mainapp.order_thread_count++; OrderClass dealer_object = new OrderClass(); // Create OrderClass object to place an order after converting to string Int32 amount = r1.Next(1, 50); need = need - amount; dealer_object.setSenderID(ID + 1); dealer_object.setAmount(amount); dealer_object.setCreditCard(CreditCard[ID]); dealer_object.setUnitPrice(Unit_Price); String res = Encoder.Encode(dealer_object); // Call encoder to convert DataObject to String Monitor.Enter(Mainapp.Buffer); // Acquire an exclusive lock on Buffer object try { Mainapp.Buffer.setOneCell(res); // Call setOneCell to add string to the cell Console.WriteLine("Dealer " + (ID + 1) + " has placed the order--> " + "Number Of Cars:" + dealer_object.getAmount() + " UnitPrice:" + dealer_object.getUnitPrice() + " CreditCard:" + dealer_object.getCreditCard()); } catch { Console.WriteLine("Error"); } finally { Monitor.Exit(Mainapp.Buffer); } // Release an exclusive lock on Buffer object } cut_event.Reset(); // Set the event to false } }
// Encode function to convert object of type OrderClass to String by adding space as delimiter public static String Encode(OrderClass e) { String s = Convert.ToString(e.getSenderID()) + " " + Convert.ToString(e.getAmount()) + " " + Convert.ToString(e.getCreditCard()) + " " + Convert.ToString(e.getUnitPrice());; return(s); }