Exemple #1
0
        //Desconecta o server setando MaxValue para o ip do server
        public void DisconnectServer(String ip)
        {
            //Desliga o Server colocando metrica MaxValue para ele
            RoutedItem item = clientList.Where(x => x.IpToSend.Equals(IPAddress.Parse(ip))).FirstOrDefault();

            item.Metric = Int16.MaxValue;
        }
Exemple #2
0
        public void AddClient(String ipToSend, Int32 metric, String output, bool addedInServer = false)
        {
            RoutedItem receivedItem = new RoutedItem(ipToSend, metric, output);

            //Se nao tem o IP destino na lista do server - cadastra
            if (!clientList.Any(x => x.IpToSend.Equals(receivedItem.IpToSend)))
            {
                receivedItem.Metric = receivedItem.Metric + 1;
                clientList.Add(receivedItem);
            }
            //Se tem o IP destino, entao confere a metrica e usa a menor
            else if (clientList.Any(x => x.IpToSend.Equals(receivedItem.IpToSend)))
            {
                //Item que existe na tabela local
                RoutedItem itemInList = clientList.Where(x => x.IpToSend.Equals(receivedItem.IpToSend)).FirstOrDefault();

                //Se o ip foi adicionado no server, atualiza a saida e a metrica
                if (addedInServer)
                {
                    itemInList.Metric = 1;
                    itemInList.Output = receivedItem.Output;
                }
                //Se a metrica do item que foi recebido é menor que o existente na tabela local, atualiza a tabela
                //e ver de quem recebeu IP
                else if (!receivedItem.IpToSend.Equals(itemInList.Output) && receivedItem.Metric + 1 < itemInList.Metric)
                {
                    itemInList.Metric = receivedItem.Metric + 1;
                    itemInList.Output = receivedItem.IpToSend;
                }
                //Se a saida do item recebido for igual ao ip da lista e a metrica menor, atualiza a metrica e a saida
                else if (receivedItem.Output.Equals(itemInList.IpToSend) && receivedItem.Metric + 1 < itemInList.Metric)
                {
                    itemInList.Metric = receivedItem.Metric + 1;
                    itemInList.Output = receivedItem.Output;
                }
                //Se o IP recebido é igual a saida do item de mesmo IP no server e a metrica é zero(IP LOCAL) ou a metrica eh MAXVALUE(Server desligado) atualiza a metrica na tabela
                else if (receivedItem.IpToSend.Equals(itemInList.Output) &&
                         (receivedItem.Metric.Equals(0) || receivedItem.Metric.Equals(Int16.MaxValue + 1) || receivedItem.Metric.Equals(Int16.MaxValue)))
                {
                    itemInList.Metric = receivedItem.Metric + 1;
                }
            }
        }
Exemple #3
0
        //Reconect o server setando 0 para o ip do server
        internal void RestartServer(String ip)
        {
            RoutedItem item = clientList.Where(x => x.IpToSend.Equals(IPAddress.Parse(ip))).FirstOrDefault();

            item.Metric = 0;
        }