Ejemplo n.º 1
0
        private Stack <SubnetworkPointPool> CalculateShortestPath(SubnetworkPointPool beginSnpp,
                                                                  SubnetworkPointPool endSnpp, int demandedCapacity)
        {
            var beginNode      = beginSnpp.NodeAddress.GetRootFromBeginning(LocalAddress.Levels + 1);
            var endNode        = endSnpp.NodeAddress.GetRootFromBeginning(LocalAddress.Levels + 1);
            var availableLinks = _links.Where(link => link.CapacityLeft >= demandedCapacity).ToList();
            var preparedPaths  = Convert(availableLinks);

            var shortestPath = Engine.CalculateShortestPathBetween(beginNode, endNode, preparedPaths);

            return(Convert(beginSnpp, shortestPath, endSnpp));
        }
Ejemplo n.º 2
0
 public void UpdateDirectory(string clientName, NetworkAddress clientNetworkAddress, SubnetworkPointPool networkNodeSnpp)
 {
     _directory.UpdateDirectory(clientName, clientNetworkAddress, networkNodeSnpp);
 }
Ejemplo n.º 3
0
        private Stack <SubnetworkPointPool> Convert(SubnetworkPointPool beginSnpp, LinkedList <Path <NetworkAddress> > paths,
                                                    SubnetworkPointPool endSnpp)
        {
            var subnetworkPointPools = new Stack <SubnetworkPointPool>();

            OnUpdateState("[AVAILABLE_ROUTE]");

            OnUpdateState($"                   BEGIN: {beginSnpp}");
            if (paths.Count > 0)
            {
                if (LocalAddress.IsDomain || beginSnpp.NodeAddress.Levels - LocalAddress.Levels > 1)
                {
                    var firstPathSnpp = paths.First.Value.Link.BeginSubnetworkPointPool;
                    if (!firstPathSnpp.Equals(beginSnpp))
                    {
                        subnetworkPointPools.Push(beginSnpp);
                        //subnetworkPointPools.Push(firstPathSnpp);
                        OnUpdateState($"                   {beginSnpp}->{firstPathSnpp}");
                    }
                    foreach (var path in paths)
                    {
                        if (
                            !beginSnpp.NodeAddress.GetRootFromBeginning(LocalAddress.Levels + 1)
                            .Equals(
                                path.Link.BeginSubnetworkPointPool.NodeAddress.GetRootFromBeginning(
                                    LocalAddress.Levels + 1)))
                        {
                            subnetworkPointPools.Push(path.Link.BeginSubnetworkPointPool);
                        }
                        subnetworkPointPools.Push(path.Link.EndSubnetworkPointPool);

                        OnUpdateState($"                   {path.Link}");
                    }
                }
                else
                {
                    foreach (var path in paths)
                    {
                        subnetworkPointPools.Push(path.Link.BeginSubnetworkPointPool);
                        subnetworkPointPools.Push(path.Link.EndSubnetworkPointPool);

                        OnUpdateState($"                   {path.Link}");
                    }
                }

                var lastPathSnpp = paths.Last.Value.Link.EndSubnetworkPointPool;

                if (!lastPathSnpp.Equals(endSnpp))
                {
                    subnetworkPointPools.Push(lastPathSnpp);
                    subnetworkPointPools.Push(endSnpp);
                    OnUpdateState($"                   {lastPathSnpp}->{endSnpp}");
                }
            }
            else if (beginSnpp.NodeAddress.Equals(endSnpp.NodeAddress))
            {
                subnetworkPointPools.Push(beginSnpp);
                subnetworkPointPools.Push(endSnpp);
            }
            OnUpdateState($"                   END: {endSnpp}");

            return(subnetworkPointPools);
        }
 private Link FindLinkByEnd(SubnetworkPointPool snpp)
 {
     return(_nodeLinks.Find(l => l.EndSubnetworkPointPool.Equals(snpp)));
 }
Ejemplo n.º 5
0
 public void UpdateDirectory(string clientName, NetworkAddress clientNetworkAddress, SubnetworkPointPool networkNodeSnpp)
 {
     _clientAddressDictionary.Add(clientName, clientNetworkAddress);
     _snppDictionary.Add(clientName, networkNodeSnpp);
     OnUpdateState($"[ADDED] Client {clientName} is connected to {networkNodeSnpp}");
 }
 protected bool Equals(SubnetworkPointPool other)
 {
     return(Equals(NetworkAddress, other.NetworkAddress));
 }