public void PartialSave()
        {
            foreach (var task in Tasks)
            {
                if (task == null || !task.IsRunning || task.Output == null)
                {
                    continue;
                }

                task.PartialSaveInProgress = true;

                OutputPlugin outp = task.Output.GetPlugin() as OutputPlugin;

                if (sw != null)
                {
                    outPutstartTime = sw.ElapsedMilliseconds;
                }

                var status = new StatusDelegate(outp_StatusUpdate);

                outp.StatusUpdate += status;

                outp.Save(task.ReduceResult);

                task.Output.Location = Guid.NewGuid() + ".db3";

                outp.StatusUpdate -= status;

                task.ReduceResult.Clear();  // clear memory after saving

                GC.Collect();

                task.PartialSaveInProgress = false;
            }
        }
Example #2
0
        private void Stop()
        {
            string         result = enviador.Halt();
            StatusDelegate del    = new StatusDelegate(navigationMonitor.AtualizaStatus);

            this.Dispatcher.BeginInvoke(del, result);
        }
Example #3
0
 private void SetStatus(string message, bool Show = true)
 {
     if (Show)
     {
         if (statusStrip1.InvokeRequired)
         {
             StatusDelegate d = new StatusDelegate(SetStatus);
             this.Invoke(d, new object[] { message, Show });
         }
         else
         {
             lblStatus.Text = message;
         }
     }
     else
     {
         if (statusStrip1.InvokeRequired)
         {
             StatusDelegate d = new StatusDelegate(SetStatus);
             this.Invoke(d, new object[] { message, Show });
         }
         else
         {
             lblStatus.Text = message;
         }
     }
 }
Example #4
0
        public void Status(ProcessElementENUM element, string message, int total)
        {
            // InvokeRequired required compares the thread ID of the
            // calling thread to the thread ID of the creating thread.
            // If these threads are different, it returns true.
            if (this.InvokeRequired)
            {
                StatusDelegate d = new StatusDelegate(Status);
                this.Invoke(d, new object[] { element, message, total });
            }
            else
            {
                switch (element)
                {
                case ProcessElementENUM.Element:
                    setFileProgress(prbElementMain, lblProcessElement, message, total);
                    break;

                case ProcessElementENUM.Files:
                    setFileProgress(prbFileMain, lblProcessFile, message, total);

                    break;

                case ProcessElementENUM.Folder:
                    setFileProgress(prbFolderMain, lblProcessFolder, message, total);

                    break;
                }
            }
        }
Example #5
0
 /// <summary>
 /// Initialize a status writer.
 /// </summary>
 /// <param name="strip">Status strip holding the messages.</param>
 /// <param name="parent">Parent which contains the status writer.
 /// (May be invoked recursively across threads).</param>
 /// <param name="crossInvoke">Delegate to invoke cross-threads in parent.</param>
 public StatusWriter(ToolStripStatusLabel strip, Control parent, StatusDelegate crossInvoke)
 {
     this.label         = strip;
     this.parentControl = parent;
     this.defaultStatusStripBackColor = strip.BackColor;
     this.crossInvoke = crossInvoke;
 }
Example #6
0
        public void PartialSave()
        {
            foreach (var task in Tasks.Where(task => task != null && task.IsRunning && task.Output != null))
            {
                task.PartialSaveInProgress = true;

                var outp = task.Output.GetPlugin() as OutputPlugin;

                if (_stopwatch != null)
                {
                    _outPutstartTime = _stopwatch.ElapsedMilliseconds;
                }

                var status = new StatusDelegate(outp_StatusUpdate);

                if (outp != null)
                {
                    outp.StatusUpdate += status;

                    outp.Save(task.ReduceResult);

                    task.Output.Location = Guid.NewGuid() + ".db3";

                    outp.StatusUpdate -= status;
                }

                task.ReduceResult.Clear();  // clear memory after saving

                GC.Collect();

                task.PartialSaveInProgress = false;
            }
        }
Example #7
0
        public MasterAPI(string[] pcsUrls)
        {
            Servers         = new ConcurrentDictionary <string, IServer>();
            ServerUrls      = "";
            ServerIdsToUrls = new ConcurrentDictionary <string, string>();

            Clients = new ConcurrentDictionary <string, IClient>();

            PCSs = new ConcurrentDictionary <string, ProcessCreationService>();
            foreach (string url in pcsUrls)
            {
                PCSs.TryAdd(BaseUrlExtractor.Extract(url), (ProcessCreationService)Activator.GetObject(typeof(ProcessCreationService), url));
            }

            _startProcessDelegate = new StartProcessDelegate(StartProcess);

            _serverDelegate         = new ServerDelegate(ServerSync);
            _clientDelegate         = new ClientDelegate(ClientSync);
            _addRoomDelegate        = new AddRoomDelegate(AddRoomSync);
            _statusDelegate         = new StatusDelegate(StatusSync);
            _crashDelegate          = new CrashDelegate(CrashSync);
            _freezeDelegate         = new FreezeDelegate(FreezeSync);
            _unfreezeDelegate       = new UnfreezeDelegate(UnfreezeSync);
            _shutDownSystemDelegate = new ShutDownSystemDelegate(ShutDownSystemSync);

            _checkNodeStatusDelegate = new CheckNodeStatus(CheckNode);

            _nodesCreated = 0;
        }
Example #8
0
 /// <summary>
 /// Initialize a status writer.
 /// </summary>
 /// <param name="strip">Status strip holding the messages.</param>
 /// <param name="parent">Parent which contains the status writer.  
 /// (May be invoked recursively across threads).</param>
 /// <param name="crossInvoke">Delegate to invoke cross-threads in parent.</param>
 public StatusWriter(ToolStripStatusLabel strip, Control parent, StatusDelegate crossInvoke)
 {
     this.label = strip;
     this.parentControl = parent;
     this.defaultStatusStripBackColor = strip.BackColor;
     this.crossInvoke = crossInvoke;
 }
Example #9
0
 private void SetStatus(string message, bool Show = true)
 {
     if (Show)
     {
         if (statusStrip1.InvokeRequired)
         {
             StatusDelegate d = new StatusDelegate(SetStatus);
             this.Invoke(d, new object[] { message, Show });
         }
         else
         {
             lblStatus.Text = message;
             Application.DoEvents();                     // ensure updates occur instantly
         }
     }
     else
     {
         if (statusStrip1.InvokeRequired)
         {
             StatusDelegate d = new StatusDelegate(SetStatus);
             this.Invoke(d, new object[] { message, Show });
         }
         else
         {
             lblStatus.Text = message;
             Application.DoEvents();                     // ensure updates occur instantly
         }
     }
 }
        private static void PhraseRecognitionSystem_InvokeStatusChangedEvent(SpeechSystemStatus status)
        {
            StatusDelegate onStatusChanged = OnStatusChanged;

            if (onStatusChanged != null)
            {
                onStatusChanged(status);
            }
        }
Example #11
0
 public Form1()
 {
     rand             = new Random();
     cookieContainer  = new CookieContainer();
     progressDelegate = new ProgressDelegate(updateProgress);
     listViewDelegate = new ListViewDelegate(updateListView);
     statusDelegate   = new StatusDelegate(updateStatus);
     InitializeComponent();
 }
 public Form1()
 {
     rand = new Random();
     cookieContainer = new CookieContainer();
     progressDelegate = new ProgressDelegate(updateProgress);
     listViewDelegate = new ListViewDelegate(updateListView);
     statusDelegate = new StatusDelegate(updateStatus);
     InitializeComponent();
 }
Example #13
0
        private void AsyncCallStatus(StatusDelegate caller)
        {
            caller.BeginInvoke(asyncResult =>
            {
                AsyncResult ar           = (AsyncResult)asyncResult;
                StatusDelegate remoteDel = (StatusDelegate)ar.AsyncDelegate;

                string response = remoteDel.EndInvoke(asyncResult);
                Console.Write(response);
            }, null);
        }
Example #14
0
 public static void WaitForTaskToComplete(IApiResult apiResponse, StatusDelegate getStatus)
 {
     var value = apiResponse.Value;
     var complete = 0;
     while (complete < 100)
     {
         var callApi = getStatus(value);
         complete = int.Parse(callApi.Value);
         Thread.Sleep(1000);
     }
 }
Example #15
0
 public void ReportStatus(string message)
 {
     if (this.InvokeRequired)
     {
         StatusDelegate del = new StatusDelegate(ReportStatus);
         this.Invoke(del, new object[] { message });
     }
     else
     {
         this.status_display.Text = message;
     }
 }
Example #16
0
        public static void WaitForTaskToComplete(IApiResult apiResponse, StatusDelegate getStatus)
        {
            var value    = apiResponse.Value;
            var complete = 0;

            while (complete < 100)
            {
                var callApi = getStatus(value);
                complete = int.Parse(callApi.Value);
                Thread.Sleep(1000);
            }
        }
Example #17
0
 private void setStatus(string msg = "")
 {
     if (InvokeRequired)
     {
         StatusDelegate status = new StatusDelegate(setStatus);
         Invoke(status, msg);
     }
     else
     {
         status.Text = "Status: " + msg;
         status.Refresh();
     }
 }
Example #18
0
        public Form1()
        {
            InitializeComponent();

            udpClient = new UdpClient(REGISTER_PORT);

            outputScanDelegate  = OutputScannedNetworks;
            stoppedBindDelegate = OutputBindCompleted;

            telnetDelegate   = TelnetDrone;
            registerDelegate = RegisterDrone;

            statusDelegate = StatusEx;
        }
 static void statusCheck(StatusDelegate action, params DownloadStatus[] statusArray)
 {
     foreach (var obj in Enum.GetValues(typeof(DownloadStatus)))
     {
         DownloadStatus status = (DownloadStatus)obj;
         if (statusArray.Any(_ => _ == status))
         {
             Assert.IsTrue(action(status));
         }
         else
         {
             Assert.IsFalse(action(status));
         }
     }
 }
Example #20
0
 public static void UpdateToolStripStatus(ToolStripStatusLabel _Label, string _Value)
 {
     if (_Label.GetCurrentParent().InvokeRequired)
     {
         StatusDelegate d = new StatusDelegate(UpdateToolStripStatus);
         _Label.GetCurrentParent().Invoke(d, new object[] { _Label, _Value });
     }
     else
     {
         if (_Value.Length > 50)
         {
             _Value = "..." + _Value.Substring(_Value.Length - 50);
         }
         _Label.Text = _Value;
     }
 }
Example #21
0
 public static void UpdateToolStripStatus(ToolStripStatusLabel label, string value)
 {
     if (label.GetCurrentParent().InvokeRequired)
     {
         var d = new StatusDelegate(UpdateToolStripStatus);
         label.GetCurrentParent().Invoke(d, label, value);
     }
     else
     {
         if (value.Length > 50)
         {
             value = "..." + value.Substring(value.Length - 50);
         }
         label.Text = value;
     }
 }
Example #22
0
 public DownloaderFeedback(IChoker choker, SchedulerDelegate addTaskFunction, StatusDelegate statusFunction, MeasureRateDelegate uploadFunction,
                           MeasureRateDelegate downloadFunction, MeasureRateDelegate remainingFunction, AmountDelegate leftFunction, long fileLength, Flag finishFlag,
                           double interval, bool sp)
 {
     this.choker            = choker;
     this.addTaskFunction   = addTaskFunction;
     this.statusFunction    = statusFunction;
     this.uploadFunction    = uploadFunction;
     this.downloadFunction  = downloadFunction;
     this.remainingFunction = remainingFunction;
     this.leftFunction      = leftFunction;
     this.fileLength        = fileLength;
     this.finishFlag        = finishFlag;
     this.interval          = interval;
     this.sp      = sp;
     this.lastIDs = new List <byte[]>();
     this.Display();
 }
Example #23
0
        protected void SeekImpl(double secs, StatusDelegate status_callback)
        {
            EnsureMappedFile();

            double start = m_CurrentTime;
            double end   = secs;

            int i = 0;

            OnBeginSeek(secs);

            while (secs > m_CurrentTime)
            {
                if (0 == (i & 1023) && status_callback != null)
                {
                    double pct = (m_CurrentTime - start) / (end - start);
                    status_callback(Math.Min(pct, 1.0));
                }
                if (!NextEvent(secs))
                {
                    break;
                }
                ++i;
            }

            while (secs < m_CurrentTime)
            {
                if (0 == (i & 1023) && status_callback != null)
                {
                    double pct = (m_CurrentTime - start) / (end - start);
                    status_callback(Math.Min(pct, 1.0));
                }
                if (!PrevEvent(secs))
                {
                    break;
                }
                ++i;
            }

            OnEndSeek(secs);
        }
Example #24
0
        private void interpreter_FixObtained()
        {
            GeminiHardware.Instance.Trace.Enter("FixObtained");

            StatusDelegate message = new StatusDelegate(ProcessStatus);
            this.BeginInvoke(message, new Object[] { global::ASCOM.GeminiTelescope.Properties.Resources.DataOK, false, 3 });
            GeminiHardware.Instance.Trace.Exit("FixObtained");
        }
Example #25
0
        public Command CreateCommand(string name, string title, string description, string HotKey, ExecuteDelegate executeMethod, StatusDelegate statusMethod)
        {
            object[] contextGUIDS = new object[] { };
            Command  result       = null;

            string fullname = GetFullName(name);

            result = GetCommand(fullname);


            if (result == null)
            {
                Commands2 commands = (Commands2)ApplicationObject.Commands;
                result = commands.AddNamedCommand2(
                    AddInInstance,
                    name,
                    title,
                    description,
                    true,
                    0,
                    ref contextGUIDS,
                    (int)vsCommandStatus.vsCommandStatusSupported +
                    (int)vsCommandStatus.vsCommandStatusEnabled,
                    (int)vsCommandStyle.vsCommandStylePictAndText,
                    vsCommandControlType.vsCommandControlTypeButton);

                // *** If a hotkey was provided try to set it
                //result.Bindings = bindings;
                if (HotKey != null && HotKey != "")
                {
                    object[] bindings = (object[])result.Bindings;
                    if (bindings != null)
                    {
                        bindings    = new object[1];
                        bindings[0] = (object)HotKey;
                        try
                        {
                            result.Bindings = (object)bindings;
                        }
                        catch
                        {
                            // Do nothing
                        }
                    }
                }
            }

            if (!CommandList.ContainsKey(fullname))
            {
                CommandHandle handle = new CommandHandle();
                handle.CommandObject = result;
                handle.ExecuteMethod = executeMethod;
                handle.StatusMethod  = statusMethod;

                CommandList.Add(fullname, handle);
            }

            return(result);
        }
Example #26
0
        private void Simular()
        {
            var inicioFinInstance  = new InicioFinDelegate(InicioFin);
            var columnasInstance   = new ColumnasDelegate(AgregarColumnas);
            var filaInstance       = new FilaDelegate(AgregarFila);
            var statusInstance     = new StatusDelegate(ActualizarStatus);
            var resultadosInstance = new ResultadosDelegate(MostrarResultados);

            Invoke(inicioFinInstance, false);

            //manejo de llegadas
            var horaInicio = DateTime.Today.AddHours(8);
            var horaFin    = DateTime.Today.AddHours(18);
            var media      = double.Parse(txt_llegadas_media.Text);
            //media = media / 24;
            //media = media / 60;
            var           lambda = 1 / media;
            IDistribucion distribucionLlegadas = new DistribucionExponencialNegativa(lambda);
            Llegada       llegadas             = new Llegada(distribucionLlegadas, horaInicio, horaFin);

            //manejo de Quitado de Alfombras
            DateTime tiempoQA         = DateTime.Parse(txt_tiempoQA.Text);
            var      colaQA           = new ColaFifo("Quitado de Alfombra");
            var      quitadoAlfombras = new Servidor(tiempoQA, colaQA, "Quitado de Alfombra", false, true);

            //manejo de Aspirado
            var generadorCongMixto   = new CongruencialMixto(1000, 12, 17, 5000);
            var aspirado_a           = double.Parse(txt_aspirado_a.Text);
            var aspirado_b           = double.Parse(txt_aspirado_b.Text);
            var distribucionAspirado = new DistribucionUniforme(aspirado_a, aspirado_b, generadorCongMixto);
            var colaAspirado         = new ColaFifo("Aspirado");
            var aspirado             = new Servidor(distribucionAspirado, colaAspirado, "Aspirado", false, false);

            //manejo de Lavado

            var lavado_a           = double.Parse(txt_lavado_a.Text);
            var lavado_b           = double.Parse(txt_lavado_b.Text);
            var distribucionLavado = new DistribucionUniforme(lavado_a, lavado_b, generadorCongMixto);
            //var distribucionLavado = new DistribucionUniforme(lavado_a, lavado_b);
            var colaLS    = new ColaFifo("Lavadero");
            var lavadero1 = new Servidor(distribucionLavado, colaLS, "Lavadero 1", false, false);
            var lavadero2 = new Servidor(distribucionLavado, colaLS, "Lavadero 2", false, false);

            //manejo de secado

            var secadora = new Servidor("Secadora", true, false);

            //manejo de puesta de alfombra
            DateTime tiempoPA      = DateTime.Parse(txt_puesta_alfombras.Text);
            var      colaPA        = new ColaFifo("Puesta de Alfombra");
            var      ponerAlfombra = new Servidor(tiempoPA, colaPA, "Puesta de Alfombra", false, true);


            var dias  = int.Parse(txt_dias.Text);
            var desde = int.Parse(txt_desde.Text);
            var hasta = int.Parse(txt_hasta.Text);

            decimal promedioAtendidos   = 0;
            decimal promedioPermanencia = 0;

            var simulacion = 0;
            var numAutos   = 0;
            var clientes   = new List <Cliente>();
            int colaMax    = 0;
            var atendidos  = 0;

            _cancelar = false;
            for (var dia = 1; dia <= dias; dia++)
            {
                if (_cancelar == true)
                {
                    break;
                }


                decimal permanenciaDiaria = 0;
                llegadas.Abrir();

                while (llegadas.EstaAbierto() ||
                       !quitadoAlfombras.EstaLibre() ||
                       !aspirado.EstaLibre() ||
                       !aspirado.EstaLibre() ||
                       !secadora.EstaLibre() ||
                       !lavadero1.EstaLibre() ||
                       !lavadero2.EstaLibre() ||
                       !ponerAlfombra.EstaLibre())
                {
                    if (_cancelar)
                    {
                        break;
                    }

                    simulacion++;


                    var eventos = new List <Evento>
                    {
                        new Evento("Llegada", llegadas.ProximaLlegada),
                        new Evento("Cierre", llegadas.Cierre),
                        new Evento("Fin de Quitado de Alfombras", quitadoAlfombras.ProximoFinAtencion),
                        new Evento("Fin de Aspirado", aspirado.ProximoFinAtencion),
                        new Evento("Fin de Secado", secadora.ProximoFinAtencion),
                        new Evento("Fin de Lavadero 1", lavadero1.ProximoFinAtencion),
                        new Evento("Fin de Lavadero 2", lavadero2.ProximoFinAtencion),
                        new Evento("Fin Puesta de alfombras", ponerAlfombra.ProximoFinAtencion),
                    };

                    var relojActual  = eventos.Where(ev => ev.Hora.HasValue).Min(ev => ev.Hora).Value;
                    var eventoActual = eventos.First(ev => ev.Hora.Equals(relojActual)).Nombre;

                    switch (eventoActual)
                    {
                    case "Llegada":
                        numAutos++;
                        String tipoAuto         = ObtenerTipo();
                        var    alfombraLlegando = new Alfombra($"Alfombra de Auto {numAutos}");
                        var    clienteLlegando  = new Cliente($"Auto {numAutos}", tipoAuto, alfombraLlegando);
                        clienteLlegando.Llegar(relojActual);
                        quitadoAlfombras.LlegadaCliente(relojActual, clienteLlegando);
                        llegadas.ActualizarLlegada(1);
                        if (simulacion <= hasta)
                        {
                            clientes.Add(clienteLlegando);

                            Invoke(columnasInstance, numAutos);
                        }
                        break;

                    case "Fin de Quitado de Alfombras":
                        var clienteSinAlfombra = quitadoAlfombras.FinAtencion();
                        aspirado.LlegadaCliente(relojActual, clienteSinAlfombra);
                        if (lavadero1.EstaLibre())
                        {
                            lavadero1.LlegadaCliente(relojActual, clienteSinAlfombra);
                        }
                        else
                        {
                            lavadero2.LlegadaCliente(relojActual, clienteSinAlfombra);
                        }

                        break;

                    case "Fin de Aspirado":
                        var clienteAspirado = aspirado.FinAtencion();
                        if (clienteAspirado.Humedad <= 1)
                        {
                            ponerAlfombra.LlegadaCliente(relojActual, clienteAspirado);
                        }
                        break;

                    case "Fin de Lavadero 1":
                        if (lavadero1.ClienteActual.Humedad < 1)
                        {
                            var clienteSeco = lavadero1.FinAtencion();
                            ponerAlfombra.LlegadaCliente(relojActual, clienteSeco);
                        }
                        else
                        {
                            if (secadora.EstaLibre())
                            {
                                var clienteLavado1 = lavadero1.FinAtencion();
                                secadora.LlegadaCliente(relojActual, clienteLavado1);
                            }
                            else
                            {
                                lavadero1.cambiarEstado("Bloqueado");
                                lavadero1.ComenzarSecado(relojActual);
                            }
                        }


                        break;

                    case "Fin de Lavadero 2":
                        if (lavadero2.ClienteActual.Humedad < 1)
                        {
                            var clienteSeco = lavadero2.FinAtencion();
                            ponerAlfombra.LlegadaCliente(relojActual, clienteSeco);
                        }
                        else
                        {
                            if (secadora.EstaLibre())
                            {
                                var clienteLavado2 = lavadero2.FinAtencion();
                                secadora.LlegadaCliente(relojActual, clienteLavado2);
                            }
                            else
                            {
                                lavadero2.cambiarEstado("Bloqueado");
                                lavadero2.ComenzarSecado(relojActual);
                            }
                        }
                        break;

                    case "Fin de Secado":
                        Cliente clienteASecado = null;
                        Cliente clienteSecado  = secadora.FinAtencion();
                        if (lavadero1.EstaBloqueado() & lavadero2.EstaBloqueado())
                        {
                            clienteASecado = lavadero1.ClienteActual;
                            clienteASecado.CalcularSecado(relojActual);
                            lavadero1.cambiarEstado("Libre");
                            lavadero1.FinAtencion();
                            secadora.LlegadaCliente(relojActual, clienteASecado);
                        }
                        else
                        {
                            if (lavadero1.EstaBloqueado())
                            {
                                clienteASecado = lavadero1.ClienteActual;
                                clienteASecado.CalcularSecado(relojActual);
                                lavadero1.cambiarEstado("Libre");
                                lavadero1.FinAtencion();
                                secadora.LlegadaCliente(relojActual, clienteASecado);
                            }
                            else
                            {
                                if (lavadero2.EstaBloqueado())
                                {
                                    clienteASecado = lavadero2.ClienteActual;
                                    clienteASecado.CalcularSecado(relojActual);
                                    lavadero2.cambiarEstado("Libre");
                                    lavadero2.FinAtencion();
                                    secadora.LlegadaCliente(relojActual, clienteASecado);
                                }
                            }
                        }

                        ponerAlfombra.LlegadaCliente(relojActual, clienteSecado);

                        break;

                    case "Fin Puesta de alfombras":

                        var clienteSaliendo = ponerAlfombra.FinAtencion();
                        if (clienteSaliendo != null)
                        {
                            clienteSaliendo.Salir(relojActual);
                            permanenciaDiaria = (permanenciaDiaria * atendidos + clienteSaliendo.TiempoEnSistema) / (atendidos + 1);
                            atendidos++;
                        }
                        break;

                    case "Cierre":
                        llegadas.Cerrar();
                        colaQA.Vaciar();
                        break;
                    }

                    colaMax = quitadoAlfombras.MaxCola;
                    if (simulacion % 10 == 0)
                    {
                        Invoke(statusInstance, dia, relojActual, simulacion);
                    }
                    //termina la simulacion
                    if (simulacion >= desde && simulacion <= hasta)
                    { //esto invoca el metodo de llenado de la fila
                        Invoke(filaInstance, relojActual, eventoActual, llegadas, colaQA, quitadoAlfombras, colaAspirado,
                               aspirado, colaLS, lavadero1, lavadero2, secadora, colaPA, ponerAlfombra, atendidos, permanenciaDiaria, clientes);
                    }
                }

                var permanenciaAnterior = promedioPermanencia * promedioAtendidos * (dia - 1);
                promedioAtendidos = (promedioAtendidos * (dia - 1) + atendidos) / dia;


                if (promedioAtendidos != 0)
                {
                    promedioPermanencia = (permanenciaAnterior + permanenciaDiaria * atendidos) / (promedioAtendidos * dia);
                }
            }

            Invoke(resultadosInstance, promedioAtendidos, promedioPermanencia, colaMax, atendidos);
            Invoke(inicioFinInstance, true);
            var resultado = _cancelar ? "interrumpida" : "completa";

            MessageBox.Show($@"Simulación {resultado}", @"Resultado");
        }
Example #27
0
        private void interpreter_DataTimeout()
        {
            GeminiHardware.Instance.Trace.Enter("DataTimeout");

            StatusDelegate message = new StatusDelegate(ProcessStatus);
            this.BeginInvoke(message, new Object[] { global::ASCOM.GeminiTelescope.Properties.Resources.WaitingForData, true, 1 });
            GeminiHardware.Instance.Trace.Exit("DataTimeout");
        }
Example #28
0
        private void interpreter_FixLost()
        {
            GeminiHardware.Instance.Trace.Enter("FixLost");

            StatusDelegate message = new StatusDelegate(ProcessStatus);
            this.BeginInvoke(message, new Object[] { global::ASCOM.GeminiTelescope.Properties.Resources.GPSNoFix, true, 2 });
            GeminiHardware.Instance.Trace.Exit("FixLost");

        }
Example #29
0
 public void SeekTo(double secs, StatusDelegate status_callback)
 {
     SeekImpl(secs, status_callback);
 }
        private void Simular()
        {
            var inicioFinInstance  = new InicioFinDelegate(InicioFin);
            var columnasInstance   = new ColumnasDelegate(AgregarColumnas);
            var filaInstance       = new FilaDelegate(AgregarFila);
            var statusInstance     = new StatusDelegate(ActualizarStatus);
            var resultadosInstance = new ResultadosDelegate(MostrarResultados);

            Invoke(inicioFinInstance, false);

            Boolean bContinua     = false;
            int     nTipoContinua = 0;

            if (rbTP6.Checked)
            {
                bContinua = true;
                if (rb_euler.Checked)
                {
                    nTipoContinua = 1;
                }
                if (rb_rungekutta.Checked)
                {
                    nTipoContinua = 2;
                }
            }

            // opcional: uso un generador congruencial mixto en vez de un generador del sistema.
            var generadorCongMixto = new CongruencialMixto(1000, 12, 17, 5000);

            var recepcionA = double.Parse(txt_recepcion_a.Text);
            var recepcionB = double.Parse(txt_recepcion_b.Text);
            //var distribucionRecepcion = new DistribucionUniforme(recepcionA, recepcionB); //uso generador del sistema
            var distribucionRecepcion = new DistribucionUniforme(recepcionA, recepcionB, generadorCongMixto);   //uso generador cong. mixto.
            var colaRecepcion         = new ColaFifo("Recepción");
            var recepcion             = new Servidor(distribucionRecepcion, colaRecepcion, "Recepción", false); //crea el objeto servidor de recepciony le pasa la cola y la distribucion

            var balanzaA = double.Parse(txt_balanza_a.Text);
            var balanzaB = double.Parse(txt_balanza_b.Text);
            //var distribucionBalanza = new DistribucionUniforme(balanzaA, balanzaB); //uso generador del sistema
            var distribucionBalanza = new DistribucionUniforme(balanzaA, balanzaB, generadorCongMixto); //uso generador cong. mixto.
            var colaBalanza         = new ColaFifo("Balanza");
            var balanza             = new Servidor(distribucionBalanza, colaBalanza, "Balanza", false); //crea la balanza y le pasa la cola y la distribucion

            var litrosA            = double.Parse(txt_litros_a.Text);
            var litrosB            = double.Parse(txt_litros_b.Text);
            var distribucionLitros = new DistribucionUniforme(litrosA, litrosB, generadorCongMixto);
            var distribucionK      = new DistribucionNormal(0.2, 0.7, generadorCongMixto);

            var darsenasA = double.Parse(txt_darsenas_a.Text);
            var darsenasB = double.Parse(txt_darsenas_b.Text);
            //var distribucionDarsenas = new DistribucionUniforme(darsenasA, darsenasB); //uso generador del sistema
            var distribucionDarsenas  = new DistribucionUniforme(darsenasA, darsenasB, generadorCongMixto); //uso generador cong. mixto.
            var colaDarsenas          = new ColaFifo("Dársenas");
            var mediaRecalibracion    = double.Parse(txt_recalibracion_media.Text);
            var varianzaRecalibracion = double.Parse(txt_recalibracion_varianza.Text);
            //var distribucionRecalibracion = new DistribucionNormal(mediaRecalibracion, varianzaRecalibracion); //uso generador del sistema
            var distribucionRecalibracion = new DistribucionNormal(mediaRecalibracion, varianzaRecalibracion, generadorCongMixto);                                                //uso generador cong. mixto.
            var darsena1 = new Servidor(distribucionDarsenas, colaDarsenas, "Dársena 1", bContinua, distribucionRecalibracion, distribucionLitros, distribucionK, nTipoContinua); //crea las darsenas
            var darsena2 = new Servidor(distribucionDarsenas, colaDarsenas, "Dársena 2", bContinua, distribucionRecalibracion, distribucionLitros, distribucionK, nTipoContinua); //crea las darsenas

            IDistribucion distribucionLlegadas;
            var           horaInicio = DateTime.Today.AddHours(5);
            var           horaFin    = DateTime.Today.AddHours(18);
            Llegada       llegadas;

            if (rb_estrategia_a.Checked) //elije que estrategias va a usar si la exponencial o la uniforme para las llegadas
            {
                var lambda = double.Parse(txt_llegadas_lambda.Text);
                lambda = lambda / 24; // convierto el numero a su valor en formato de horas
                lambda = lambda / 60; // convierto el numero de formato horas a su valor en horas-minutos.
                distribucionLlegadas = new DistribucionExponencialNegativa(lambda);
                llegadas             = new Llegada(distribucionLlegadas, DateTime.Today.AddHours(12), horaFin);
            }
            else
            {
                distribucionLlegadas = new DistribucionUniforme(7, 8);
                llegadas             = new Llegada(distribucionLlegadas, horaInicio, horaFin);
            }

            var dias  = int.Parse(txt_dias.Text);   // cuantos dias se va a simular
            var desde = int.Parse(txt_desde.Text);
            var hasta = int.Parse(txt_hasta.Text);

            decimal promedioAtendidos   = 0;
            decimal promedioNoAtendidos = 0;
            decimal promedioPermanencia = 0;

            var afuera     = new List <Cliente>(); //lista de cuantos camiones quedaron afuera
            var simulacion = 0;
            var numCamion  = 0;
            var clientes   = new List <Cliente>();

            _cancelar = false;

            for (var dia = 1; dia <= dias; dia++) //empieza la simulacion desde el dia 1
            {
                if (_cancelar)
                {
                    break;
                }

                var     atendidos         = 0;
                var     noAtendidos       = 0;
                decimal permanenciaDiaria = 0;
                llegadas.Abrir();

                while (llegadas.EstaAbierto() ||
                       !recepcion.EstaLibre() ||
                       !balanza.EstaLibre() ||
                       !darsena1.EstaLibre() ||
                       !darsena2.EstaLibre())     //se fija que este abierto y esten libres los servidores
                {
                    if (_cancelar)
                    {
                        break;
                    }

                    simulacion++;

                    if (llegadas.EstaAbierto() && afuera.Count > 0)
                    {
                        foreach (var cliente in afuera)
                        {
                            if (_cancelar)
                            {
                                break;
                            }

                            cliente.Llegar(horaInicio);
                            recepcion.LlegadaCliente(horaInicio, cliente);
                        }

                        afuera = new List <Cliente>();
                    }

                    var eventos = new List <Evento>
                    {
                        new Evento("Llegada", llegadas.ProximaLlegada),
                        new Evento("Cierre", llegadas.Cierre),
                        new Evento("Fin Recepción", recepcion.ProximoFinAtencion),
                        new Evento("Fin Balanza", balanza.ProximoFinAtencion),
                        new Evento("Fin Dársena 1", darsena1.ProximoFinAtencion),
                        new Evento("Fin Dársena 2", darsena2.ProximoFinAtencion)
                    };

                    var relojActual  = eventos.Where(ev => ev.Hora.HasValue).Min(ev => ev.Hora).Value;
                    var eventoActual = eventos.First(ev => ev.Hora.Equals(relojActual)).Nombre;

                    switch (eventoActual)
                    {
                    case "Llegada":
                        numCamion++;
                        var clienteLlegando = new Cliente($"Camión {numCamion}");
                        clienteLlegando.Llegar(relojActual);
                        recepcion.LlegadaCliente(relojActual, clienteLlegando);
                        if (rb_estrategia_a.Checked)
                        {
                            llegadas.ActualizarLlegada(1);
                        }
                        else
                        {
                            llegadas.ActualizarLlegada(0);
                        }
                        if (simulacion <= hasta)
                        {
                            clientes.Add(clienteLlegando);

                            Invoke(columnasInstance, numCamion);
                        }
                        break;

                    case "Fin Recepción":
                        var clienteReceptado = recepcion.FinAtencion();
                        balanza.LlegadaCliente(relojActual, clienteReceptado);
                        break;

                    case "Fin Balanza":
                        var clientePesado = balanza.FinAtencion();
                        if (darsena1.EstaLibre())
                        {
                            darsena1.LlegadaCliente(relojActual, clientePesado);
                        }
                        else
                        {
                            darsena2.LlegadaCliente(relojActual, clientePesado);
                        }
                        break;

                    case "Fin Dársena 1":
                        var clienteSaliendo1 = darsena1.FinAtencion();
                        if (clienteSaliendo1 != null)
                        {
                            clienteSaliendo1.Salir(relojActual);
                            permanenciaDiaria = (permanenciaDiaria * atendidos + clienteSaliendo1.TiempoEnSistema) / (atendidos + 1);
                            atendidos++;
                        }
                        break;

                    case "Fin Dársena 2":
                        var clienteSaliendo2 = darsena2.FinAtencion();
                        if (clienteSaliendo2 != null)
                        {
                            clienteSaliendo2.Salir(relojActual);
                            permanenciaDiaria = (permanenciaDiaria * atendidos + clienteSaliendo2.TiempoEnSistema) / (atendidos + 1);
                            atendidos++;
                        }
                        break;

                    case "Cierre":
                        llegadas.Cerrar();

                        noAtendidos = colaRecepcion.Cantidad();
                        afuera.AddRange(colaRecepcion.Clientes);
                        colaRecepcion.Vaciar();

                        promedioNoAtendidos = (promedioNoAtendidos * (dia - 1) + noAtendidos) / dia;
                        break;
                    }

                    if (simulacion % 10 == 0)
                    {
                        Invoke(statusInstance, dia, relojActual, simulacion);
                    }
                    //termina la simulacion
                    if (simulacion >= desde && simulacion <= hasta)
                    { //esto invoca el metodo de llenado de la fila
                        Invoke(filaInstance, relojActual, eventoActual, llegadas, colaRecepcion, recepcion, colaBalanza,
                               balanza, colaDarsenas, darsena1, darsena2, atendidos, noAtendidos, permanenciaDiaria, clientes);
                    }
                }

                var permanenciaAnterior = promedioPermanencia * promedioAtendidos * (dia - 1);
                promedioAtendidos   = (promedioAtendidos * (dia - 1) + atendidos) / dia;
                promedioNoAtendidos = (promedioNoAtendidos * (dia - 1) + noAtendidos) / dia;

                if (promedioAtendidos != 0)
                {
                    promedioPermanencia = (permanenciaAnterior + permanenciaDiaria * atendidos) / (promedioAtendidos * dia);
                }
            }

            Invoke(resultadosInstance, promedioAtendidos, promedioNoAtendidos, promedioPermanencia);
            Invoke(inicioFinInstance, true);
            var resultado = _cancelar ? "interrumpida" : "completa";

            MessageBox.Show($@"Simulación {resultado}", @"Resultado");
        }
        public static void Run(ApplicationDataClass appData, CallBackDelegate callBack, StatusDelegate status)
        {
            Recover process = new Recover();

            process.Status   = status;
            process.CallBack = callBack;
            process.AppData  = appData;
            Thread th = new Thread(new ThreadStart(process.RunProcess));

            th.Name         = "Click Once Recovery";
            th.IsBackground = true;
            th.Start();
        }
Example #32
0
        private void interpreter_InvalidData()
        {
            GeminiHardware.Instance.Trace.Enter("InvalidData");

            StatusDelegate message = new StatusDelegate(ProcessStatus);
            this.BeginInvoke(message, new Object[] { global::ASCOM.GeminiTelescope.Properties.Resources.InvalidDataReceived, true, 2 });
            GeminiHardware.Instance.Trace.Exit("InvalidData");
        }
        public void DispatchStatus(string result)
        {
            StatusDelegate del = new StatusDelegate(this.AtualizaStatus);

            this.Dispatcher.BeginInvoke(del, result);
        }
Example #34
0
        private void Simular()
        {
            //delegates
            var inicioFinInstance  = new InicioFinDelegate(InicioFin);
            var columnasInstance   = new ColumnasDelegate(AgregarColumnas);
            var filaInstance       = new FilaDelegate(AgregarFila);
            var statusInstance     = new StatusDelegate(ActualizarStatus);
            var resultadosInstance = new ResultadosDelegate(MostrarResultados);

            //preparación inicial del formulario
            Invoke(inicioFinInstance, false);

            //clientes
            var entreLlegadas        = double.Parse(txt_llegadas.Text);
            var distribucionLlegadas = new DistribucionUniforme(entreLlegadas, entreLlegadas);

            var minInicio  = (double)DateTimeConverter.EnMinutos($"{txt_apertura.Text}:00");
            var horaInicio = DateTime.Today.AddMinutes(minInicio);

            var minFin  = (double)DateTimeConverter.EnMinutos($"{txt_cierre.Text}:00");
            var horaFin = DateTime.Today.AddMinutes(minFin);

            var local = new Llegada(distribucionLlegadas, horaInicio, horaFin);

            var colaMax = int.Parse(txt_cola_max.Text);

            //grupos
            var probabilidadGrupo2 = double.Parse(txt_grupos_2.Text);
            var probabilidadGrupo4 = double.Parse(txt_grupos_4.Text);

            var grupos = new DistribucionAleatoria(new List <Probabilidad>
            {
                new Probabilidad(2, probabilidadGrupo2),
                new Probabilidad(4, probabilidadGrupo4)
            });

            //menús
            var probabilidadMenu1 = double.Parse(txt_menu_1.Text);
            var probabilidadMenu2 = double.Parse(txt_menu_2.Text);

            var menus = new DistribucionAleatoria(new List <Probabilidad>
            {
                new Probabilidad(1, probabilidadMenu1),
                new Probabilidad(2, probabilidadMenu2)
            });

            var demoraMenu1       = double.Parse(txt_demora_menu_1.Text);
            var distribucionMenu1 = new DistribucionUniforme(demoraMenu1, demoraMenu1);

            var demoraMenu2       = double.Parse(txt_demora_menu_2.Text);
            var distribucionMenu2 = new DistribucionUniforme(demoraMenu2, demoraMenu2);

            //mozo
            var demoraCarta       = double.Parse(txt_carta.Text);
            var distribucionCarta = new DistribucionUniforme(demoraCarta, demoraCarta);

            var demoraPedido       = double.Parse(txt_pedido.Text);
            var distribucionPedido = new DistribucionUniforme(demoraPedido, demoraPedido);

            //comida
            var media    = double.Parse(txt_comida_media.Text);
            var varianza = double.Parse(txt_comida_varianza.Text);

            var distribucionComida = new DistribucionNormal(media, varianza);

            //eventos
            var inicio = int.Parse(txt_desde.Text);
            var fin    = int.Parse(txt_hasta.Text);

            //servidores
            var colaMesas = new ColaVacia();
            var mesa1     = new Servidor(distribucionComida, colaMesas, "Mesa 1");
            var mesa2     = new Servidor(distribucionComida, colaMesas, "Mesa 2");
            var mesa3     = new Servidor(distribucionComida, colaMesas, "Mesa 3");
            var mesa4     = new Servidor(distribucionComida, colaMesas, "Mesa 4");
            var mesa5     = new Servidor(distribucionComida, colaMesas, "Mesa 5");
            var mesa6     = new Servidor(distribucionComida, colaMesas, "Mesa 6");
            var mesa7     = new Servidor(distribucionComida, colaMesas, "Mesa 7");
            var mesa8     = new Servidor(distribucionComida, colaMesas, "Mesa 8");
            var mesa9     = new Servidor(distribucionComida, colaMesas, "Mesa 9");
            var mesa10    = new Servidor(distribucionComida, colaMesas, "Mesa 10");

            var mesas = new List <Ocupacion>
            {
                new Ocupacion(mesa1),
                new Ocupacion(mesa2),
                new Ocupacion(mesa3),
                new Ocupacion(mesa4),
                new Ocupacion(mesa5),
                new Ocupacion(mesa6),
                new Ocupacion(mesa7),
                new Ocupacion(mesa8),
                new Ocupacion(mesa9),
                new Ocupacion(mesa10)
            };

            var colaMozo = new ColaPriorizada("mozo");
            var mozo     = new ServidorDoble(distribucionCarta, distribucionPedido, colaMozo, "mozo");

            var colaCocina = new ColaFifo("cocina");
            var cocina     = new ServidorDoble(distribucionMenu1, distribucionMenu2, colaCocina, "cocina");

            //simulación

            var     simulacion       = 0;
            var     numCliente       = 0;
            var     colaLocal        = new ColaFifo("local");
            var     clientes         = new List <VectorCliente>();
            var     atendidos        = 0;
            var     perdidos         = 0;
            var     acumuladorEspera = new PromedioAcumulado();
            decimal esperaPromedio   = 0;

            local.Abrir();

            _cancelar = false;

            while (local.EstaAbierto() ||
                   !mozo.EstaLibre() ||
                   !cocina.EstaLibre() ||
                   mesas.Any(m => !m.Mesa.EstaLibre()))
            {
                if (_cancelar)
                {
                    break;
                }

                simulacion++;

                var eventos = new List <Evento>
                {
                    new Evento("Llegada", local.ProximaLlegada),
                    new Evento("Cierre", local.Cierre),
                    new Evento("Fin Mozo", mozo.ProximoFinAtencion),
                    new Evento("Fin Cocina", cocina.ProximoFinAtencion),
                    new Evento("Fin Mesa 1", mesa1.ProximoFinAtencion),
                    new Evento("Fin Mesa 2", mesa2.ProximoFinAtencion),
                    new Evento("Fin Mesa 3", mesa3.ProximoFinAtencion),
                    new Evento("Fin Mesa 4", mesa4.ProximoFinAtencion),
                    new Evento("Fin Mesa 5", mesa5.ProximoFinAtencion),
                    new Evento("Fin Mesa 6", mesa6.ProximoFinAtencion),
                    new Evento("Fin Mesa 7", mesa7.ProximoFinAtencion),
                    new Evento("Fin Mesa 8", mesa8.ProximoFinAtencion),
                    new Evento("Fin Mesa 9", mesa9.ProximoFinAtencion),
                    new Evento("Fin Mesa 10", mesa10.ProximoFinAtencion),
                };

                // ReSharper disable once PossibleInvalidOperationException
                var relojActual  = eventos.Where(ev => ev.Hora.HasValue).Min(ev => ev.Hora).Value;
                var eventoActual = eventos.First(ev => ev.Hora.Equals(relojActual)).Nombre;

                switch (eventoActual)
                {
                case "Llegada":
                    local.ActualizarLlegada();
                    numCliente++;
                    var clienteLlegando = new Cliente($"Grupo {numCliente}", 1);
                    clienteLlegando.Llegar(relojActual);
                    var cantidadGrupo = (int)grupos.ObtenerValor();

                    if (simulacion < fin)
                    {
                        clientes.Add(new VectorCliente
                        {
                            Cliente  = clienteLlegando,
                            Cantidad = cantidadGrupo
                        });
                        //agrego las columnas para el vector de estados del cliente
                        Invoke(columnasInstance, numCliente);
                    }

                    if (mesas.Any(m => m.EstaLibre()))
                    {
                        var mesaLibre = mesas.First(m => m.EstaLibre());
                        mesaLibre.Ocupar(clienteLlegando, cantidadGrupo);
                        mozo.LlegadaGrupo(relojActual, clienteLlegando, cantidadGrupo);
                        if (simulacion < fin)
                        {
                            clientes.Last().Mesa = mesaLibre.Mesa.Nombre;
                        }
                    }
                    else if (colaLocal.Cantidad() < colaMax)
                    {
                        colaLocal.AgregarCliente(clienteLlegando);
                    }
                    else
                    {
                        clienteLlegando.Salir(relojActual);
                        perdidos += cantidadGrupo;
                    }
                    break;

                case "Fin Mozo":
                    var clienteAtendido = mozo.FinAtencion();
                    var mesa            = mesas.Single(m => clienteAtendido.Equals(m.Cliente));
                    if (clienteAtendido.Prioridad.Equals(1))
                    {
                        var pedido          = (int)menus.ObtenerValor();
                        var cantidadPedidos = mesa.Cantidad;
                        clienteAtendido.CambiarPrioridad(pedido);
                        cocina.LlegadaGrupo(relojActual, clienteAtendido, cantidadPedidos);

                        if (simulacion < fin)
                        {
                            clientes.Single(c => c.Cliente.Equals(clienteAtendido))
                            .Menu         = $"Menu {pedido}";
                            eventoActual += " (Carta)";
                        }
                    }
                    else
                    {
                        mesa.Mesa.LlegadaCliente(relojActual, clienteAtendido);
                        eventoActual += " (Pedido)";
                    }
                    break;

                case "Fin Cocina":
                    var clienteConPedido = cocina.FinAtencion();
                    clienteConPedido.CambiarPrioridad(2);
                    mozo.LlegadaCliente(relojActual, clienteConPedido);
                    break;

                case "Fin Mesa 1":
                    var clienteSaliendo1 = mesa1.FinAtencion();
                    clienteSaliendo1.Salir(relojActual);
                    var cantidadAtendidos1 = mesas.Single(m => m.Mesa.Equals(mesa1)).Cantidad;
                    atendidos += cantidadAtendidos1;

                    for (var i = 0; i < cantidadAtendidos1; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo1.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa1)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 2":
                    var clienteSaliendo2 = mesa2.FinAtencion();
                    clienteSaliendo2.Salir(relojActual);
                    var cantidadAtendidos2 = mesas.Single(m => m.Mesa.Equals(mesa2)).Cantidad;
                    atendidos += cantidadAtendidos2;

                    for (var i = 0; i < cantidadAtendidos2; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo2.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa2)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 3":
                    var clienteSaliendo3 = mesa3.FinAtencion();
                    clienteSaliendo3.Salir(relojActual);
                    var cantidadAtendidos3 = mesas.Single(m => m.Mesa.Equals(mesa3)).Cantidad;
                    atendidos += cantidadAtendidos3;

                    for (var i = 0; i < cantidadAtendidos3; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo3.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa3)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 4":
                    var clienteSaliendo4 = mesa4.FinAtencion();
                    clienteSaliendo4.Salir(relojActual);
                    var cantidadAtendidos4 = mesas.Single(m => m.Mesa.Equals(mesa4)).Cantidad;
                    atendidos += cantidadAtendidos4;

                    for (var i = 0; i < cantidadAtendidos4; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo4.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa4)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 5":
                    var clienteSaliendo5 = mesa5.FinAtencion();
                    clienteSaliendo5.Salir(relojActual);
                    var cantidadAtendidos5 = mesas.Single(m => m.Mesa.Equals(mesa5)).Cantidad;
                    atendidos += cantidadAtendidos5;

                    for (var i = 0; i < cantidadAtendidos5; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo5.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa5)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 6":
                    var clienteSaliendo6 = mesa6.FinAtencion();
                    clienteSaliendo6.Salir(relojActual);
                    var cantidadAtendidos6 = mesas.Single(m => m.Mesa.Equals(mesa6)).Cantidad;
                    atendidos += cantidadAtendidos6;

                    for (var i = 0; i < cantidadAtendidos6; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo6.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa6)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 7":
                    var clienteSaliendo7 = mesa7.FinAtencion();
                    clienteSaliendo7.Salir(relojActual);
                    var cantidadAtendidos7 = mesas.Single(m => m.Mesa.Equals(mesa7)).Cantidad;
                    atendidos += cantidadAtendidos7;

                    for (var i = 0; i < cantidadAtendidos7; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo7.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa7)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 8":
                    var clienteSaliendo8 = mesa8.FinAtencion();
                    clienteSaliendo8.Salir(relojActual);
                    var cantidadAtendidos8 = mesas.Single(m => m.Mesa.Equals(mesa8)).Cantidad;
                    atendidos += cantidadAtendidos8;

                    for (var i = 0; i < cantidadAtendidos8; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo8.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa8)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 9":
                    var clienteSaliendo9 = mesa9.FinAtencion();
                    clienteSaliendo9.Salir(relojActual);
                    var cantidadAtendidos9 = mesas.Single(m => m.Mesa.Equals(mesa9)).Cantidad;
                    atendidos += cantidadAtendidos9;

                    for (var i = 0; i < cantidadAtendidos9; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo9.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa9)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Fin Mesa 10":
                    var clienteSaliendo10 = mesa10.FinAtencion();
                    clienteSaliendo10.Salir(relojActual);
                    var cantidadAtendidos10 = mesas.Single(m => m.Mesa.Equals(mesa10)).Cantidad;
                    atendidos += cantidadAtendidos10;

                    for (var i = 0; i < cantidadAtendidos10; i++)
                    {
                        esperaPromedio = acumuladorEspera.CalcularSiguiente(clienteSaliendo10.TiempoEspera);
                    }

                    mesas.Single(m => m.Mesa.Equals(mesa10)).Liberar();

                    if (!colaLocal.Vacia())
                    {
                        var clienteEsperando  = colaLocal.ProximoCliente();
                        var cantidadEsperando = (int)grupos.ObtenerValor();
                        mesas.First(m => m.EstaLibre()).Ocupar(clienteEsperando, cantidadEsperando);
                        mozo.LlegadaGrupo(relojActual, clienteEsperando, cantidadEsperando);
                    }
                    break;

                case "Cierre":
                    local.Cerrar();
                    foreach (var cliente in colaLocal.Clientes)
                    {
                        var cantidadAfuera = (int)grupos.ObtenerValor();
                        cliente.Salir(relojActual);
                        perdidos += cantidadAfuera;
                    }
                    colaLocal.Vaciar();
                    break;
                }
                //agrego la fila del evento actual
                if (simulacion >= inicio && simulacion <= fin)
                {
                    Invoke(filaInstance, relojActual, eventoActual, local, colaLocal, colaMozo, mozo,
                           colaCocina, cocina, mesas, atendidos, perdidos, esperaPromedio, clientes);
                }

                //cada 10 eventos actualizo el status
                if (simulacion % 10 == 0)
                {
                    Invoke(statusInstance, relojActual, simulacion);
                }
            }
            //muestro los resultados
            Invoke(resultadosInstance, atendidos, perdidos, esperaPromedio);

            //dejo el formulario como estaba
            Invoke(inicioFinInstance, true);
        }
Example #35
0
        private void Simular()
        {
            var inicioFinInstance  = new InicioFinDelegate(InicioFin);
            var columnasInstance   = new ColumnasDelegate(AgregarColumnas);
            var filaInstance       = new FilaDelegate(AgregarFila);
            var statusInstance     = new StatusDelegate(ActualizarStatus);
            var resultadosInstance = new ResultadosDelegate(MostrarResultados);

            Invoke(inicioFinInstance, false);

            var recepcionA            = double.Parse(txt_recepcion_a.Text);
            var recepcionB            = double.Parse(txt_recepcion_b.Text);
            var distribucionRecepcion = new DistribucionUniforme(recepcionA, recepcionB);
            var colaRecepcion         = new ColaFifo("Recepción");
            var recepcion             = new Servidor(distribucionRecepcion, colaRecepcion, "Recepción");

            var balanzaA            = double.Parse(txt_balanza_a.Text);
            var balanzaB            = double.Parse(txt_balanza_b.Text);
            var distribucionBalanza = new DistribucionUniforme(balanzaA, balanzaB);
            var colaBalanza         = new ColaFifo("Balanza");
            var balanza             = new Servidor(distribucionBalanza, colaBalanza, "Balanza");

            var darsenasA                 = double.Parse(txt_darsenas_a.Text);
            var darsenasB                 = double.Parse(txt_darsenas_b.Text);
            var distribucionDarsenas      = new DistribucionUniforme(darsenasA, darsenasB);
            var colaDarsenas              = new ColaFifo("Dársenas");
            var mediaRecalibracion        = double.Parse(txt_recalibracion_media.Text);
            var varianzaRecalibracion     = double.Parse(txt_recalibracion_varianza.Text);
            var distribucionRecalibracion = new DistribucionNormal(mediaRecalibracion, varianzaRecalibracion);
            var darsena1 = new Servidor(distribucionDarsenas, colaDarsenas, "Dársena 1", distribucionRecalibracion);
            var darsena2 = new Servidor(distribucionDarsenas, colaDarsenas, "Dársena 2", distribucionRecalibracion);

            IDistribucion distribucionLlegadas;
            var           horaInicio = DateTime.Today.AddHours(5);
            var           horaFin    = DateTime.Today.AddHours(18);
            Llegada       llegadas;

            if (rb_estrategia_a.Checked)
            {
                var lambda = double.Parse(txt_llegadas_lambda.Text);
                distribucionLlegadas = new DistribucionExponencialNegativa(lambda);
                llegadas             = new Llegada(distribucionLlegadas, DateTime.Today.AddHours(12), horaFin);
            }
            else
            {
                distribucionLlegadas = new DistribucionUniforme(7, 8);
                llegadas             = new Llegada(distribucionLlegadas, horaInicio, horaFin);
            }

            var dias  = int.Parse(txt_dias.Text);
            var desde = int.Parse(txt_desde.Text);
            var hasta = int.Parse(txt_hasta.Text);

            decimal promedioAtendidos   = 0;
            decimal promedioNoAtendidos = 0;
            decimal promedioPermanencia = 0;

            var afuera     = new List <Cliente>();
            var simulacion = 0;
            var numCamion  = 0;
            var clientes   = new List <Cliente>();

            _cancelar = false;

            for (var dia = 1; dia <= dias; dia++)
            {
                if (_cancelar)
                {
                    break;
                }

                var     atendidos         = 0;
                var     noAtendidos       = 0;
                decimal permanenciaDiaria = 0;
                llegadas.Abrir();

                while (llegadas.EstaAbierto() ||
                       !recepcion.EstaLibre() ||
                       !balanza.EstaLibre() ||
                       !darsena1.EstaLibre() ||
                       !darsena2.EstaLibre())
                {
                    if (_cancelar)
                    {
                        break;
                    }

                    simulacion++;

                    if (llegadas.EstaAbierto() && afuera.Count > 0)
                    {
                        foreach (var cliente in afuera)
                        {
                            if (_cancelar)
                            {
                                break;
                            }

                            cliente.Llegar(horaInicio);
                            recepcion.LlegadaCliente(horaInicio, cliente);
                        }

                        afuera = new List <Cliente>();
                    }

                    var eventos = new List <Evento>
                    {
                        new Evento("Llegada", llegadas.ProximaLlegada),
                        new Evento("Cierre", llegadas.Cierre),
                        new Evento("Fin Recepción", recepcion.ProximoFinAtencion),
                        new Evento("Fin Balanza", balanza.ProximoFinAtencion),
                        new Evento("Fin Dársena 1", darsena1.ProximoFinAtencion),
                        new Evento("Fin Dársena 2", darsena2.ProximoFinAtencion)
                    };

                    // ReSharper disable once PossibleInvalidOperationException
                    var relojActual  = eventos.Where(ev => ev.Hora.HasValue).Min(ev => ev.Hora).Value;
                    var eventoActual = eventos.First(ev => ev.Hora.Equals(relojActual)).Nombre;

                    switch (eventoActual)
                    {
                    case "Llegada":
                        numCamion++;
                        var clienteLlegando = new Cliente($"Camión {numCamion}");
                        clienteLlegando.Llegar(relojActual);
                        recepcion.LlegadaCliente(relojActual, clienteLlegando);
                        llegadas.ActualizarLlegada();
                        if (simulacion <= hasta)
                        {
                            clientes.Add(clienteLlegando);

                            Invoke(columnasInstance, numCamion);
                        }
                        break;

                    case "Fin Recepción":
                        var clienteReceptado = recepcion.FinAtencion();
                        balanza.LlegadaCliente(relojActual, clienteReceptado);
                        break;

                    case "Fin Balanza":
                        var clientePesado = balanza.FinAtencion();
                        if (darsena1.EstaLibre())
                        {
                            darsena1.LlegadaCliente(relojActual, clientePesado);
                        }
                        else
                        {
                            darsena2.LlegadaCliente(relojActual, clientePesado);
                        }
                        break;

                    case "Fin Dársena 1":
                        var clienteSaliendo1 = darsena1.FinAtencion();
                        if (clienteSaliendo1 != null)
                        {
                            clienteSaliendo1.Salir(relojActual);
                            permanenciaDiaria = (permanenciaDiaria * atendidos + clienteSaliendo1.TiempoEnSistema) / (atendidos + 1);
                            atendidos++;
                        }
                        break;

                    case "Fin Dársena 2":
                        var clienteSaliendo2 = darsena2.FinAtencion();
                        if (clienteSaliendo2 != null)
                        {
                            clienteSaliendo2.Salir(relojActual);
                            permanenciaDiaria = (permanenciaDiaria * atendidos + clienteSaliendo2.TiempoEnSistema) / (atendidos + 1);
                            atendidos++;
                        }
                        break;

                    case "Cierre":
                        llegadas.Cerrar();

                        noAtendidos = colaRecepcion.Cantidad();
                        afuera.AddRange(colaRecepcion.Clientes);
                        colaRecepcion.Vaciar();

                        promedioNoAtendidos = (promedioNoAtendidos * (dia - 1) + noAtendidos) / dia;
                        break;
                    }

                    if (simulacion % 10 == 0)
                    {
                        Invoke(statusInstance, dia, relojActual, simulacion);
                    }

                    if (simulacion >= desde && simulacion <= hasta)
                    {
                        Invoke(filaInstance, relojActual, eventoActual, llegadas, colaRecepcion, recepcion, colaBalanza,
                               balanza, colaDarsenas, darsena1, darsena2, atendidos, noAtendidos, permanenciaDiaria, clientes);
                    }
                }

                var permanenciaAnterior = promedioPermanencia * promedioAtendidos * (dia - 1);

                promedioAtendidos   = (promedioAtendidos * (dia - 1) + atendidos) / dia;
                promedioNoAtendidos = (promedioNoAtendidos * (dia - 1) + noAtendidos) / dia;
                promedioPermanencia = (permanenciaAnterior + permanenciaDiaria * atendidos) / (promedioAtendidos * dia);
            }

            Invoke(resultadosInstance, promedioAtendidos, promedioNoAtendidos, promedioPermanencia);

            Invoke(inicioFinInstance, true);

            var resultado = _cancelar ? "interrumpida" : "completa";

            MessageBox.Show($@"Simulación {resultado}", @"Resultado");
        }
Example #36
0
 public void ReportStatus(string message)
 {
     if (this.InvokeRequired)
     {
         StatusDelegate del = new StatusDelegate(ReportStatus);
         this.Invoke(del, new object[] { message });
     }
     else
     {
         this.status_display.Text = message;
     }
 }
Example #37
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="_orginalStorage">storage对象</param>
        /// <param name="requestSize">子片断长度</param>
        /// <param name="hashes">文件片断摘要信息</param>
        /// <param name="pieceLength">片断长度</param>
        /// <param name="finishedFunc">在下载完成的时候设置的事件</param>
        /// <param name="failedFunc">在下载失败的时候设置的事件</param>
        /// <param name="statusFunc">状态函数</param>
        /// <param name="flag"></param>
        /// <param name="checkHashes"></param>
        /// <param name="dataFlunkedFunc">用来检查片断的完整性的函数</param>
        public StorageWrapper(Storage storage, int requestSize, List <byte[]> hashes, int pieceLength, FinishedDelegate finishedFunc,
                              FailedDelegate failedFunc, StatusDelegate statusFunc, Flag flag, bool checkHashes, DataFlunkedDelegate dataFlunkedFunc)
        {
            this.checkHashes         = checkHashes;
            this._storage            = storage;
            this.requestSize         = requestSize;
            this.hashes              = hashes;
            this.pieceLength         = pieceLength;
            this.dataFlunkedFunction = dataFlunkedFunc;
            this.totalLength         = 0;//storage.SumLength;
            this.leftLength          = this.totalLength;


            //检验是否需要接收数据的长度符合标准
            CheckTotalLength();

            this.finishedFunction = finishedFunc;
            this.failedFunction   = failedFunc;
            numActive             = new int[hashes.Count];

            int hashesLength = hashes.Count;

            //初始化inactiveRequests链表
            InitialInactiveRequests(hashesLength);

            have = new bool[hashesLength];

            //如果校验和的长度为0,则结束
            if (hashesLength == 0)
            {
                if (finishedFunc != null)
                {
                    finishedFunc();
                }
                return;
            }

            //该片是否检查了完整性
            isChecked = false;

            int i;

            //如果磁盘上已经存在下载的文件,则校验磁盘上的文件
            if (true)//_storage.IsExisted)
            {
                //显示检查文件信息
                if (statusFunc != null)
                {
                    statusFunc("正在检查存在的文件", -1, -1, 0, -1);
                }

                for (i = 0; i < hashesLength; i++)
                {
                    CheckSingle(i, true);
                    if (flag.IsSet)
                    {
                        return;
                    }

                    //显示检查文件信息
                    if (statusFunc != null)
                    {
                        statusFunc(string.Empty, -1, -1, ((double)(i + 1) / (double)hashesLength), -1);
                    }
                }
            }

            //如果磁盘上没有文件,则新建文件
            else
            {
                for (i = 0; i < hashesLength; i++)
                {
                    CheckSingle(i, false);
                }
            }

            isChecked = true;
        }
        public void PartialSave()
        {
            foreach (var task in Tasks)
            {
                if (task == null || !task.IsRunning || task.Output == null)
                    continue;

                task.PartialSaveInProgress = true;

                OutputPlugin outp = task.Output.GetPlugin() as OutputPlugin;

                if (sw != null)
                    outPutstartTime = sw.ElapsedMilliseconds;

                var status = new StatusDelegate(outp_StatusUpdate);

                outp.StatusUpdate += status;

                outp.Save(task.ReduceResult);

                task.Output.Location = Guid.NewGuid() + ".db3";

                outp.StatusUpdate -= status;

                task.ReduceResult.Clear();  // clear memory after saving

                GC.Collect();

                task.PartialSaveInProgress = false;
            }
        }
Example #39
0
        public static void Run(ApplicationDataClass appData, CallBackDelegate callBack, StatusDelegate status)
        {
            Backup process = new Backup();

            process.Status   = status;
            process.CallBack = callBack;
            process.AppData  = appData;

            Thread th = new Thread(new ThreadStart(process.RunProcess));

            th.Name         = "Health Options backup";
            th.IsBackground = true;
            th.Start();
        }