public static Order decode(string orderStr)
        {
            CultureInfo provider = CultureInfo.InvariantCulture;

            Order order = new Order();

            /* begin parsing orderStr */
            order.setThreadId(Int32.Parse(orderStr.Substring(0, (orderStr.IndexOf(';')))));
            order.setCardNum(Int32.Parse(orderStr.Substring(orderStr.IndexOf(';') + 1, 4)));
            order.setAmount(Int32.Parse(orderStr.Substring((orderStr.LastIndexOf(';')) + 1, orderStr.IndexOf(',') - orderStr.LastIndexOf(';') - 1)));
            order.setUnitPrice(Int32.Parse(orderStr.Substring((orderStr.IndexOf(',') + 1), orderStr.IndexOf('=') - orderStr.IndexOf(',') - 1)));
            order.setStartTime(DateTime.ParseExact(orderStr.Substring(orderStr.IndexOf('=') + 1), Order.myDateFormat, provider));
            /* end parsing orderStr */

            return(order);
        }
Beispiel #2
0
        // method to be run as the 'retailer thread'
        public void retailerFunc()
        {
            while (Program.ChickenFarmIsAlive())
            {
                //sleep on startup of the loop (whenever the retailer finishes ordering)
                Thread.Sleep(100);

                if (priceWasCutArray[getId()])
                {
                    Random randNum = new Random();

                    // set the number of chickens to order
                    Int32 numOfChickensToOrder = 980 / (nPrice);
                    Order newOrder = new Order();
                    newOrder.setUnitPrice(nPrice);
                    newOrder.setAmount(numOfChickensToOrder);
                    //Sets the order credit card number between 1000 and 9999
                    newOrder.setCardNum(randNum.Next(1000, 9999));
                    newOrder.setThreadId(this.myId);

                    //encode the order as a string
                    String encodedOrder = Encoder.encode(newOrder);

                    // keep sleeping until the buffer has an open cell
                    while (Program.orderBuffer.IsFull())
                    {
                        Thread.Sleep(randNum.Next(10, 100));
                    }

                    // lock the buffer so the thread can input its encoded order
                    lock (Program.orderBuffer)
                    {
                        Program.orderBuffer.setCell(encodedOrder);
                    }

                    // indicate that the ordering has been submitted and that the thread
                    // shouldn't order again until the price is cut again
                    priceWasCutArray[getId()] = false;
                }
            }
        }
Beispiel #3
0
        // method to be run as the 'retailer thread'
        public void retailerFunc()
        {
            while (Program.ChickenFarmIsAlive())
            {
                //sleep on startup of the loop (whenever the retailer finishes ordering)
                Thread.Sleep(100);

                if (priceWasCutArray[getId()])
                {
                    Random randNum = new Random();

                    // set the number of chickens to order
                    Int32 numOfChickensToOrder = 980 / (nPrice);
                    Order newOrder             = new Order();
                    newOrder.setUnitPrice(nPrice);
                    newOrder.setAmount(numOfChickensToOrder);
                    //Sets the order credit card number between 1000 and 9999
                    newOrder.setCardNum(randNum.Next(1000, 9999));
                    newOrder.setThreadId(this.myId);

                    //encode the order as a string
                    String encodedOrder = Encoder.encode(newOrder);

                    // keep sleeping until the buffer has an open cell
                    while (Program.orderBuffer.IsFull())
                    {
                        Thread.Sleep(randNum.Next(10, 100));
                    }

                    // lock the buffer so the thread can input its encoded order
                    lock (Program.orderBuffer)
                    {
                        Program.orderBuffer.setCell(encodedOrder);
                    }

                    // indicate that the ordering has been submitted and that the thread
                    // shouldn't order again until the price is cut again
                    priceWasCutArray[getId()] = false;
                }
            }
        }