public void orderProcessing(OrderObject decodedOrder) //Order Processing thread { String agent = decodedOrder.getSenderId(); int n = (int)Char.GetNumericValue(agent[agent.Length - 1]); if (decodedOrder.getCardNo() < 2000 && decodedOrder.getCardNo() > 3000) //Checks card information { String failedBooking = "Booking failed!! Details: Processed for " + decodedOrder.getNumberRooms() //booking failed message + " rooms at $" + decodedOrder.getPrice() + " per room for " + decodedOrder.getSenderId() + " by " + decodedOrder.getReceiverId(); cBuffer.Put(failedBooking, n - 1); //Place failed order in the order confirmation buffer return; } double tax = 0.08; //tax double finalPrice = decodedOrder.getNumberRooms() * decodedOrder.getPrice(); //final price finalPrice += finalPrice * tax; finalPrice += this.locationCharge; //adding location charges TimeSpan timeSpan = System.DateTime.Now - decodedOrder.getBookingTimeStamp(); String confirmedBooking = "Booking confirmed at " + System.DateTime.Now //Booking confirmed message + " in " + timeSpan + " seconds!! Details: Processed for " + decodedOrder.getNumberRooms() + " rooms at $" + decodedOrder.getPrice() + " per room for " + decodedOrder.getSenderId() + " by " + decodedOrder.getReceiverId() + " at total cost $" + finalPrice + " including Location Charge $" + this.locationCharge; cBuffer.Put(confirmedBooking, n - 1); //Place confirmed booking in the confirmation buffer }
public void HotelFunc() //Thread Start function. { //Changes the price of the room for this hotel for (Int32 i = 0; i < 100; i++) { if (p > 10) //If 10 price cuts have finished, the threads terminates { if (priceChange != null) { priceChange(0); } Thread.CurrentThread.Abort(); } else { Int32 newPrice = rng.Next(500, 1000); changePrice(newPrice); //Changes price Thread.Sleep(500); if (mCellBuffer.getNElement() != 0) { String encodedOrder = mCellBuffer.getOneCell(); //Checking the multicell buffer for any orders if (encodedOrder != null) { OrderObject decodedOrder = Decoder.Decrypt(encodedOrder, "ABCDEFGHIJKLMNOP"); //Decrypts the order Thread orderThread = new Thread(() => this.orderProcessing(decodedOrder)); //Starts order processing parameterized thread with the argument as the order orderThread.Start(); } } } } }
private static byte[] ObjectToByteArray(OrderObject obj) { if (obj == null) { return(null); } BinaryFormatter bf = new BinaryFormatter(); using (MemoryStream ms = new MemoryStream()) { bf.Serialize(ms, obj); return(ms.ToArray()); } }
public void bookHotel(String hotel, String agent, Int32 price) // Book Hotel by sending the order information to multi cell buffer { //attempt booking OrderObject oo = new OrderObject(); oo.setSenderId(agent); oo.setCardNo(rand.Next(2000, 3000)); oo.setNumberRooms(rand.Next(10, 50)); oo.setReceiverId(hotel); oo.setPrice(price); oo.setBookingTimeStamp(System.DateTime.Now); String encodedOrder = Encoder.Encrypt(oo, "ABCDEFGHIJKLMNOP"); Console.WriteLine("{0} will attempt to book {1} having price {2} at: {3}" , agent, hotel, price, System.DateTime.Now); mCellBuffer.setOneCell(encodedOrder, oo.getReceiverId()); }
public static string Encrypt(OrderObject input, String key) { byte[] inputArray = Encoder.ObjectToByteArray(input); String result = ""; try { TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider(); tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key); tripleDES.Mode = CipherMode.ECB; tripleDES.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tripleDES.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length); tripleDES.Clear(); result = Convert.ToBase64String(resultArray, 0, resultArray.Length); } catch (Exception e) { Console.WriteLine(e.ToString()); } return(result); }