Exemple #1
0
        static void Main(String [] args)
        {
            Plant  carPlant  = new Plant();
            Plant2 carPlant2 = new Plant2();
            Thread plant     = new Thread(new ThreadStart(carPlant.PlantFunc));
            Thread plant2    = new Thread(new ThreadStart(carPlant2.PlantFunc));
            //
            Thread stocks  = new Thread(new ThreadStart(stockmarket.stockFunc));
            Thread stocks2 = new Thread(new ThreadStart(stockmarket2.stockFunc));

            //
            stocks.Start();
            stocks2.Start();
            plant.Name  = "brian";
            plant2.Name = "edward";
            plant.Start();
            plant2.Start();
            CarDealer dealer = new CarDealer();

            Plant.priceCut  += new priceCutEvent(dealer.carOnSale);
            Plant2.priceCut += new priceCutEvent(dealer.carOnSale);
            Thread[] dealers = new Thread[2];
            for (int i = 0; i < 2; i++)
            {
                dealers[i]      = new Thread(new ThreadStart(dealer.carDealerFunc));
                dealers[i].Name = (i + 1).ToString();
                dealers[i].Start();
            }

            Console.ReadLine();
        }
Exemple #2
0
 //start thread here
 public void PlantFunc()
 {
     plantName2 = Thread.CurrentThread.Name;
     for (Int32 i = 0; i < 5; i++)
     {
         Thread.Sleep(1500);
         //// mod ////
         double stockprice = CarProject.stockmarket2.getstockprice();
         Int32  p          = PricingModel(orderstaken, carsAvailable, stockprice);
         //// mod ////
         //Console.WriteLine("{0} new price is {1}", Thread.CurrentThread.Name, p);
         Plant2.carPriceChange(p);
         //Thread.Sleep(3000);
         order = CarProject.Cellbuffer.getOneCell(Thread.CurrentThread.Name);
         //Decoder(order);
         if (!"0".Equals(order))
         {
             lock (locker)
             {
                 carsAvailable--;
                 orderstaken++;
             }
             Console.WriteLine("edward received the order {0}", order);
             orderprocessing = new OrderProcessing(Decoder(order));
         }
     }
 }
Exemple #3
0
        public void carDealerFunc()
        {
            Plant  carPlant  = new Plant();
            Plant2 carPlant2 = new Plant2();
            String receiverName;
            Int32  parkingLot = 10;
            Int32  creditCard = rng.Next(5000, 7000);
            Int32  carPrice;
            Int32  carPrice2; //Plant2 carprice
            Int32  dealPrice;
            Int32  plantIndex;

            for (Int32 i = 0; i < 10; i++)
            {
                Thread.Sleep(rng.Next(500, 1000));
                carPrice  = carPlant.getPrice();
                carPrice2 = carPlant2.getPrice();
                if (carPrice > carPrice2)
                {
                    dealPrice  = carPrice2;
                    plantIndex = 2;
                }
                else
                {
                    dealPrice  = carPrice;
                    plantIndex = 1;
                }
                //check if the car in the sell list
                if (!carStatus.ContainsKey(dealPrice))
                {
                    carStatus.TryAdd(dealPrice, false);
                }
                //the dealer only buy the sale car or the car price is lower than 200
                //the first dealer which have the empty places can buy the car, the others need to wait for next price cut.
                lock (order)
                {
                    if (parkingLot != 0 && carStatus[dealPrice] == false)
                    {
                        if (plantIndex == 1)
                        {
                            receiverName = carPlant.getPlantName();
                        }
                        else
                        {
                            receiverName = carPlant2.getPlantName();
                        }
                        try
                        {
                            order.setSenderID(Thread.CurrentThread.Name);
                            order.setCardNo(creditCard);
                            order.setReceiverID(receiverName);
                            order.setAmount(1);
                            order.setUnitPrice(dealPrice);
                            order.setDateTime(DateTime.Now);
                            CarProject.Cellbuffer.setOneCell(this.Encoder(order));
                        }
                        finally
                        {
                            parkingLot--;
                            carStatus[dealPrice] = true;
                            Console.WriteLine("dealer {0} buy the car, the empty lot is {1}, the price is {2}", Thread.CurrentThread.Name, parkingLot, dealPrice);
                        }
                    }
                }
                String confirmString = CarProject.confirmBuffer.getOneCell(Thread.CurrentThread.Name);
                if (!"0".Equals(confirmString))
                {
                    Console.WriteLine(confirmString);
                }
            }
        }