public void RutinaEvento(Modelo modelo)
        {
            // Figura 1.9 pagina 32.

            this.Servidor.AcumularAreaBajoB(modelo);

            if (this.Servidor.ColaPrevia.CantidadEnCola == 0)
            {
                this.Servidor.EstablecerServidorLibre();
                modelo.QuitarEventoDeConsideracion(this.Servidor.NombreDelEventoDePartida); // Fuerza que el proximo evento sea un arribo.
            }
            else
            {
                this.Servidor.ColaPrevia.ComputarDemoraTotal(modelo);
                this.Servidor.ColaPrevia.AcumularAreaBajoQ(modelo);

                this.Servidor.ColaPrevia.EstablecerDemoraCompletada();

                modelo.EstablecerProximoEvento(this.Servidor.NombreDelEventoDePartida);
                this.Servidor.ColaPrevia.QuitarUltimoDeLaColaDeEspera();
            }

            var cola = this.Servidor.DeterminarColaDeProximoEventoArribo(modelo);

            if (cola != null)
            {
                modelo.EstablecerEventoArriboInmediato(cola.NombreDelEventoDeArribo);
            }
        }
Ejemplo n.º 2
0
        public void RutinaEvento(Modelo modelo)
        {
            // Figura 1.8 pagina 32.

            this.Cola.AcumularAreaBajoQ(modelo);
            foreach (var servidor in modelo.Servidores)
            {
                servidor.AcumularAreaBajoB(modelo);
            }

            // Refactor
            if (this.Cola.NombreDelEventoDeArribo == Comunes.ArriboColaUno) // Si es "cola inicial".
            {
                modelo.EstablecerProximoEvento(this.Cola.NombreDelEventoDeArribo);
            }
            else
            {
                modelo.QuitarEventoDeConsideracion(this.Cola.NombreDelEventoDeArribo);
            }

            var sevidoresConLosQueTrabajaLaCola = modelo.DeterminarServidoresConLosQueTrabajaUnaCola(this.Cola);

            if (sevidoresConLosQueTrabajaLaCola.All(s => s.ServidorOcupado))
            {
                this.Cola.AgregarALaColaDeEspera(modelo);
            }
            else
            {
                this.Cola.EstablecerDemoraCompletada();

                Servidor servidorLibre = sevidoresConLosQueTrabajaLaCola.OrderBy(s => s.Prioridad).FirstOrDefault(s => !s.ServidorOcupado);
                servidorLibre.EstablecerServidorOcupado();

                modelo.EstablecerProximoEvento(servidorLibre.NombreDelEventoDePartida);
            }
        }