Ejemplo n.º 1
0
 public void GetDrink()
 {
     while (Thread.CurrentThread.IsAlive)
     {
         if (Monitor.TryEnter(DrinkBuffer))
         {
             while (DrinkBuffer.GetBufferCurrent() == 0)
             {
                 Console.WriteLine(Name + " is waiting for the machine to refill");
                 Monitor.Wait(DrinkBuffer);
             }
             for (int i = 0; i < DrinkBuffer.Drinks.Length; i++)
             {
                 if (DrinkBuffer.Drinks[i] != null)
                 {
                     Console.WriteLine(Name + " Took a " + DrinkBuffer.Drinks[i].DrinkName + " and drank it");
                     DrinkBuffer.Drinks[i] = null;
                     i = DrinkBuffer.Drinks.Length + 1;
                 }
             }
             Monitor.Pulse(DrinkBuffer);
             Monitor.Exit(DrinkBuffer);
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Splits the drinks from the incoming buffer, out into the 2 other buffers
        /// </summary>
        public void SplitDrinks()
        {
            while (Thread.CurrentThread.IsAlive)
            {
                if (Monitor.TryEnter(IncomingBuffer))
                {
                    while (incomingBuffer.GetBufferCurrent() == 0)
                    {
                        Console.WriteLine("IncomingBuffer is empty...");
                        Monitor.Wait(IncomingBuffer);
                    }

                    if (Monitor.TryEnter(SodaBuffer))
                    {
                        if (SodaBuffer.GetBufferCurrent() >= SodaBuffer.Drinks.Length)
                        {
                            Console.WriteLine("SodaBuffer is full");
                            Monitor.Wait(SodaBuffer, 200);
                        }

                        for (int i = 0; i < SodaBuffer.Drinks.Length; i++)
                        {
                            if (SodaBuffer.Drinks[i] == null)
                            {
                                for (int j = 0; j < IncomingBuffer.Drinks.Length; j++)
                                {
                                    if (IncomingBuffer.Drinks[j] != null)
                                    {
                                        if (IncomingBuffer.Drinks[j].DrinkName == "Sodavand")
                                        {
                                            SodaBuffer.Drinks[i]     = IncomingBuffer.Drinks[j];
                                            IncomingBuffer.Drinks[j] = null;
                                            j = IncomingBuffer.Drinks.Length + 1;
                                            i = SodaBuffer.Drinks.Length + 1;
                                            Console.WriteLine("Splitter splitted bottle to SodaBuffer");
                                        }
                                    }
                                }
                            }
                        }
                        Monitor.Pulse(SodaBuffer);
                        Monitor.Exit(SodaBuffer);
                    }

                    if (Monitor.TryEnter(BeerBuffer))
                    {
                        if (BeerBuffer.GetBufferCurrent() >= BeerBuffer.Drinks.Length)
                        {
                            Console.WriteLine("BeerBuffer is full");
                            Monitor.Wait(BeerBuffer, 200);
                        }
                        for (int i = 0; i < BeerBuffer.Drinks.Length; i++)
                        {
                            if (BeerBuffer.Drinks[i] == null)
                            {
                                for (int j = 0; j < IncomingBuffer.Drinks.Length; j++)
                                {
                                    if (IncomingBuffer.Drinks[j] != null)
                                    {
                                        if (IncomingBuffer.Drinks[j].DrinkName == "Beer")
                                        {
                                            BeerBuffer.Drinks[i]     = IncomingBuffer.Drinks[j];
                                            IncomingBuffer.Drinks[j] = null;
                                            j = IncomingBuffer.Drinks.Length + 1;
                                            i = BeerBuffer.Drinks.Length + 1;
                                            Console.WriteLine("Splitter splitted bottle to BeerBuffer");
                                        }
                                    }
                                }
                            }
                        }
                        Monitor.Pulse(BeerBuffer);
                        Monitor.Exit(BeerBuffer);
                    }
                    Monitor.Pulse(IncomingBuffer);
                    Monitor.Exit(IncomingBuffer);
                }
            }
        }