public void RestartReception(Reception mach)
 {
     if (mach.Memory().Count() == mach.Memory().Capacity)
     {
         mach.Restart();
         Console.WriteLine("Restarting" + mach);
     }
 }
        static void Main(string[] args)
        {
            List <Machine> list      = new List <Machine>();
            Computer       computer  = new Computer(10, false);
            Reception      reception = new Reception(10, false);

            list.Add(reception);
            Storage storage = new Storage(10, false);

            list.Add(storage);
            Assembly assembly = new Assembly(10, false);

            list.Add(assembly);
            Verification verification = new Verification(10, false);

            list.Add(verification);
            Packaging packaging = new Packaging(10, false);

            list.Add(packaging);

            int hour = 9;

            Console.WriteLine("The day start");
            while (hour < 19)
            {
                Console.WriteLine(hour + "hrs");
                if (hour == 9)
                {
                    computer.On();
                    foreach (Machine j in list)
                    {
                        computer.TurnOn(j);
                    }
                    hour += 1;
                }
                else if (hour < 18)
                {
                    computer.RestartReception(reception);
                    computer.RestartStorage(storage);
                    computer.RestartAssembly(assembly);
                    computer.RestartVerification(verification);
                    computer.RestartPackaging(packaging);
                    hour += 1;
                }
                else if (hour == 18)
                {
                    foreach (Machine j in list)
                    {
                        computer.TurnOff(j);
                    }
                    computer.Off();
                    hour += 1;
                }
            }
            Console.WriteLine("The day is over");
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            //Definiendo la memoria de las máquinas de forma aleatoria.
            List <int> memory = new List <int>();
            Random     Memory = new Random();

            for (int i = 0; i <= 4; ++i)
            {
                int m = Memory.Next(10, 21);
                memory.Add(m);
            }
            //Creando las máquinas.
            Reception    reception    = new Reception(memory[0], 0);
            Storage      storage      = new Storage(memory[1], 0);
            Assembly     assembly     = new Assembly(memory[2], 0);
            Verification verification = new Verification(memory[3], 0);
            Packing      packing      = new Packing(memory[4], 0);

            Console.WriteLine("La fábrica orientada a objetos ha comenzado a funcionar \n");
            Console.WriteLine("La máquina de recepción posee una memoria de " + reception.Memory());
            Console.WriteLine("La máquina de almacenamiento posee una memoria de " + storage.Memory());
            Console.WriteLine("La máquina de ensamblaje posee una memoria de " + assembly.Memory());
            Console.WriteLine("La máquina de verificación posee una memoria de " + verification.Memory());
            Console.WriteLine("La máquina de empaque posee una memoria de " + packing.Memory() + "\n");

            //Encendiendo las máquinas.
            if (reception.State() == 0)
            {
                reception.TurnOn();
                Console.WriteLine("Máquina de recepción encendida.");
            }
            if (storage.State() == 0 && reception.State() == 1)
            {
                storage.TurnOn();
                Console.WriteLine("Máquina de almacenamiento encendida.");
            }
            if (assembly.State() == 0 && storage.State() == 1)
            {
                assembly.TurnOn();
                Console.WriteLine("Máquina de ensamblaje encendida.");
            }
            if (verification.State() == 0 && assembly.State() == 1)
            {
                verification.TurnOn();
                Console.WriteLine("Máquina de verificación encendida.");
            }
            if (packing.State() == 0 && verification.State() == 1)
            {
                packing.TurnOn();
                Console.WriteLine("Máquina de empaque encendida.\n");
            }

            int piece1 = 0;
            int piece2 = 0;
            int piece3 = 0;
            int piece4 = 0;
            int piece5 = 0;

            for (int t = 1; t <= 10; ++t) //Simulando lo que ocurre cada segundo durante 10 segundos.
            {
                Console.WriteLine("Segundo " + t);
                if (piece1 > reception.Memory())
                {
                    while (piece1 > reception.Memory())
                    {
                        Console.WriteLine("AVISO: Memoria de la máquina de recepción llena.");
                        Console.WriteLine("¿Desea reiniciar la máquina? si/no");
                        string option = Console.ReadLine();
                        if (option == "si")
                        {
                            reception.Reboot();
                            Console.WriteLine("Máquina de recepción reiniciada. \n");
                            piece1 -= piece1;
                        }
                    }
                }
                if (piece2 > storage.Memory())
                {
                    while (piece2 > storage.Memory())
                    {
                        Console.WriteLine("AVISO: Memoria de la máquina de almacenamiento llena.");
                        Console.WriteLine("Desea reiniciar la máquina? si/no");
                        string option = Console.ReadLine();
                        if (option == "si")
                        {
                            storage.Reboot();
                            Console.WriteLine("Máquina de almacenamiento reiniciada. \n");
                            piece2 -= piece2;
                        }
                    }
                }
                if (piece3 > assembly.Memory())
                {
                    while (piece3 > assembly.Memory())
                    {
                        Console.WriteLine("AVISO: Memoria de la máquina de ensamblaje llena.");
                        Console.WriteLine("Desea reiniciar la máquina? si/no");
                        string option = Console.ReadLine();
                        if (option == "si")
                        {
                            assembly.Reboot();
                            Console.WriteLine("Máquina de ensamblaje reiniciada.\n");
                            piece3 -= piece3;
                        }
                    }
                }
                if (piece4 > verification.Memory())
                {
                    while (piece4 > verification.Memory())
                    {
                        Console.WriteLine("AVISO: Memoria de la máquina de verificación llena.");
                        Console.WriteLine("Desea reiniciar la máquina? si/no");
                        string option = Console.ReadLine();
                        if (option == "si")
                        {
                            verification.Reboot();
                            Console.WriteLine("Máquina de verificación reiniciada.\n");
                            piece4 -= piece4;
                        }
                    }
                }
                if (piece5 > packing.Memory())
                {
                    while (piece5 > packing.Memory())
                    {
                        Console.WriteLine("AVISO: Memoria de la máquina de empaque llena.");
                        Console.WriteLine("Desea reiniciar la máquina? si/no");
                        string option = Console.ReadLine();
                        if (option == "si")
                        {
                            packing.Reboot();
                            Console.WriteLine("Máquina de empaque reiniciada.\n");
                            piece5 -= piece5;
                        }
                    }
                }
                else
                {
                    reception.Recieve();
                    storage.Stock();
                    assembly.Assemble();
                    verification.Verify();
                    packing.Pack();
                    Console.WriteLine();
                    piece1 += Memory.Next(1, 4);
                    piece2 += Memory.Next(1, 4);
                    piece3 += Memory.Next(1, 4);
                    piece4 += Memory.Next(1, 4);
                    piece5 += Memory.Next(1, 4);
                }
            }
            //Apagando las máquinas.
            if (reception.State() == 1)
            {
                reception.TurnOff();
                Console.WriteLine("Máquina de recepción apagada.");
            }
            if (storage.State() == 1 && reception.State() == 0)
            {
                storage.TurnOff();
                Console.WriteLine("Máquina de almacenamiento apagada.");
            }
            if (assembly.State() == 1 && storage.State() == 0)
            {
                assembly.TurnOff();
                Console.WriteLine("Máquina de ensamblaje apagada.");
            }
            if (verification.State() == 1 && assembly.State() == 0)
            {
                verification.TurnOff();
                Console.WriteLine("Máquina de verificación apagada.");
            }
            if (packing.State() == 1 && verification.State() == 0)
            {
                packing.TurnOff();
                Console.WriteLine("Máquina de empaque apagada.");
            }
            Console.WriteLine("La máquina orientada a objetos se ha apagado correctamente.");
            Console.ReadKey();
        }