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)); }
public void UpdateDirectory(string clientName, NetworkAddress clientNetworkAddress, SubnetworkPointPool networkNodeSnpp) { _directory.UpdateDirectory(clientName, clientNetworkAddress, networkNodeSnpp); }
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))); }
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)); }