Ejemplo n.º 1
0
    public void CalcularRutas(Antena antenaDestino)
    {
        foreach (var antena in Antenas)
        {
            antena.Visitada = false;
            antena.SetRuta(antenaDestino, null);
            antena.SetDistancia(antenaDestino, DistanciaSinConexion);
        }

        List <Antena> antenasPorVisitar = new List <Antena>();

        antenaDestino.SetDistancia(antenaDestino, 0);
        antenaDestino.Visitada = true;

        antenasPorVisitar.Add(antenaDestino);
        while (antenasPorVisitar.Any())
        {
            Antena antenaActual = antenasPorVisitar.First();
            antenasPorVisitar.RemoveAt(0);
            antenaActual.Visitada = true;

            foreach (var conexion in antenaActual.Conexiones)
            {
                if (conexion.Visitada)
                {
                    continue;
                }

                int distanciaConexion = antenaActual.GetDistancia(antenaDestino) + 1;
                if (distanciaConexion < conexion.GetDistancia(antenaDestino))
                {
                    conexion.SetDistancia(antenaDestino, distanciaConexion);
                    conexion.SetRuta(antenaDestino, antenaActual);
                }

                antenasPorVisitar.Add(conexion);
            }
        }
    }
Ejemplo n.º 2
0
    private void TransmitirPing()
    {
        _antenaTransmisoraPing = _antenaTransmisoraPing.GetRuta(_antenaDestinoPing);

        if (_pingingLlegoADestino && _antenaTransmisoraPing == _antenaOrigenPing)
        {
            ResultadoPing();
            Destroy(_pingFisico);
            _pinging = false;
        }
        else
        {
            if (_antenaTransmisoraPing == _antenaDestinoPing)
            {
                _pingingLlegoADestino = true;
                _pingExitoso          = _antenaDestinoPing.MensajeTrasnmitido || _antenaTransmisoraMensaje.GetRuta(RedCom.AntenaReceptora) == _antenaDestinoPing;

                _pingMensaje = "---INFORMACIÓN EN DESTINO / ANTENA #" + _antenaDestinoPing.Id + " ---\n";
                int anchoMensaje = _pingMensaje.Count();
                if (_pingExitoso)
                {
                    RedCom.CalcularRutas(_antenaTransmisoraMensaje);
                    int distancia = _antenaDestinoPing.GetDistancia(_antenaTransmisoraMensaje);
                    if (_antenaDestinoPing.MensajeTrasnmitido)
                    {
                        if (distancia == 0)
                        {
                            _pingMensaje += " ! EMITIENDO MENSAJE !\n";
                        }
                        else
                        {
                            _pingMensaje += "MENSAJE REEMITIDO - Distancia: " + distancia;
                            if (distancia == 1)
                            {
                                _pingMensaje += " salto.\n";
                            }
                            else
                            {
                                _pingMensaje += " saltos.\n";
                            }
                        }
                    }
                    else
                    {
                        _pingMensaje += "! RECIBIENDO MENSAJE !\n";
                    }
                }
                else
                {
                    _pingMensaje += "El mensaje no paso por aquí.\n";
                }

                for (int i = 0; i < anchoMensaje - 1; i++)
                {
                    _pingMensaje += "-";
                }

                _antenaDestinoPing = _antenaOrigenPing;
            }
        }
    }