コード例 #1
0
        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
        }
コード例 #2
0
        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();
                        }
                    }
                }
            }
        }
コード例 #3
0
        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());
            }
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        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);
        }