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); } } }
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; } } }