private List <Token> ConstructSkeletonGraph(IList <Node> nodes, List <Tuple <Node, Node> > edges) { TokenDistribution tokenDistribution = new TokenDistribution(); Token token; IList <Node> Vertices = new List <Node>(); List <Token> TokenwithDistanceMessage = new List <Token>(); List <Tuple <Node, Node> > Edges = new List <Tuple <Node, Node> >(); //int MaxHopDistance = 15; Vertices = nodes; Edges = edges; for (int i = 0; i < Vertices.Count; i++) { List <Tuple <Node, Node, int, int> > dupliccatetokenmessage = new List <Tuple <Node, Node, int, int> >(); token = tokenDistribution.LocalBroadcast(Edges, Vertices[i], Vertices); for (int j = 0; j < token.TokenMessage.Count; j++) { //if (token.TokenMessage[j].Item3 < MaxHopDistance) //{ dupliccatetokenmessage.Add(token.TokenMessage[j]); //} } Token duplicate = new Token(token.SourceID, dupliccatetokenmessage); TokenwithDistanceMessage.Add(duplicate); } return(TokenwithDistanceMessage); }
/*node to nodes within the max hop distance (Exact)*/ private List <Token> ConstructSkeletonGraph() { TokenDistribution tokenDistribution = new TokenDistribution(); Token token; LocalEdge localEdge = new LocalEdge(); GraphLayout graphLayout = new GraphLayout(); IList <Node> Vertices = new List <Node>(); List <Token> TokenwithDistanceMessage = new List <Token>(); List <Tuple <Node, Node> > Edges = new List <Tuple <Node, Node> >(); int MaxHopDistance = 20; Vertices = graphLayout.GetGraphLayout(); Edges = localEdge.GetGrapgEdges(Vertices); for (int i = 0; i < Vertices.Count; i++) { List <Tuple <Node, Node, int, int> > dupliccatetokenmessage = new List <Tuple <Node, Node, int, int> >(); token = tokenDistribution.LocalBroadcast(Edges, Vertices[i], Vertices); for (int j = 0; j < token.TokenMessage.Count; j++) { if (token.TokenMessage[j].Item3 < MaxHopDistance) { dupliccatetokenmessage.Add(token.TokenMessage[j]); } } Token duplicate = new Token(token.SourceID, dupliccatetokenmessage); TokenwithDistanceMessage.Add(duplicate); } return(TokenwithDistanceMessage); }
private List <Token> GetEveryNodesDistance(IList <Node> nodes, List <Tuple <Node, Node> > edges) { TokenDistribution tokenDistribution = new TokenDistribution(); Token token; IList <Node> Vertices = new List <Node>(); List <Token> TokenwithDistanceMessage = new List <Token>(); List <Tuple <Node, Node> > Edges = new List <Tuple <Node, Node> >(); Vertices = nodes; Edges = edges; for (int i = 0; i < Vertices.Count; i++) { token = tokenDistribution.LocalBroadcast(Edges, Vertices[i], Vertices); TokenwithDistanceMessage.Add(token); } return(TokenwithDistanceMessage); }
private List <Token> GetEveryNodesDistance() { TokenDistribution tokenDistribution = new TokenDistribution(); Token token; LocalEdge localEdge = new LocalEdge(); GraphLayout graphLayout = new GraphLayout(); IList <Node> Vertices = new List <Node>(); List <Token> TokenwithDistanceMessage = new List <Token>(); List <Tuple <Node, Node> > Edges = new List <Tuple <Node, Node> >(); Vertices = graphLayout.GetGraphLayout(); Edges = localEdge.GetGrapgEdges(Vertices); for (int i = 0; i < Vertices.Count; i++) { token = tokenDistribution.LocalBroadcast(Edges, Vertices[i], Vertices); TokenwithDistanceMessage.Add(token); } return(TokenwithDistanceMessage); }
//Construct Exact Algorithm From Graph from skeleton private List <Token> ConstructAlgoSkeletonGraph() { TokenDistribution tokenDistribution = new TokenDistribution(); Token token; LocalEdge localEdge = new LocalEdge(); GraphLayout graphLayout = new GraphLayout(); IList <Node> Vertices = new List <Node>(); List <Token> TokenwithDistanceMessage = new List <Token>(); List <Tuple <Node, Node> > Edges = new List <Tuple <Node, Node> >(); List <int> veticesNumber = new List <int>(); int MaxHopDistance = 20; Vertices = graphLayout.GetGraphLayout(); Edges = localEdge.GetGrapgEdges(Vertices); for (int i = 0; i < Vertices.Count; i++) { veticesNumber.Add(Vertices[i].ID); } for (int i = 0; i < Vertices.Count; i++) { List <Tuple <Node, Node, int, int, double> > dupliccatetokenmessage = new List <Tuple <Node, Node, int, int, double> >(); token = tokenDistribution.LocalBroadcast(Edges, Vertices[i], Vertices); for (int j = 0; j < token.TokenMessage.Count; j++) { //within 2 hop counts if (token.TokenMessage[j].Item4 < 3) { dupliccatetokenmessage.Add(Tuple.Create(token.TokenMessage[j].Item1, token.TokenMessage[j].Item2, token.TokenMessage[j].Item3, token.TokenMessage[j].Item4, (double)token.TokenMessage[j].Item3)); } else { dupliccatetokenmessage.Add(Tuple.Create(token.TokenMessage[j].Item1, token.TokenMessage[j].Item2, token.TokenMessage[j].Item3, token.TokenMessage[j].Item4, double.PositiveInfinity)); } } List <Tuple <Node, Node, int, int, double> > Uniquedupliccatetokenmessage = new List <Tuple <Node, Node, int, int, double> >(); Tuple <Node, Node, int, int, double> unique; if (dupliccatetokenmessage?.Count != 0) { for (int k = 0; k < veticesNumber.Count; k++) { if (veticesNumber[k] != dupliccatetokenmessage[0].Item1.ID) { unique = GetUniqueVeticesToken(veticesNumber[k], dupliccatetokenmessage); Uniquedupliccatetokenmessage.Add(unique); } else { Uniquedupliccatetokenmessage.Add(Tuple.Create(dupliccatetokenmessage[i].Item1, dupliccatetokenmessage[k].Item1, 0, 0, (double)0)); } } } var orderedDuplicatemessage = Uniquedupliccatetokenmessage.OrderBy(x => x.Item2.ID).ToList(); Token duplicate = new Token(token.SourceID, orderedDuplicatemessage); TokenwithDistanceMessage.Add(duplicate); } return(TokenwithDistanceMessage); }