private static async Task <bool> CreateAdditions(INode myNode, DiscoveryRequest request) { bool propagationAllowed = false; //Additions foreach (uint?node in myNode.CommsModule.Discover().Except(myNode.Router.NetworkMap.Entries.Select(entry => entry.ID))) { if (myNode.Router.NetworkMap.GetEntryByID(node) == null) { AdditionRequest additionRequest = new AdditionRequest() { SourceID = myNode.Id, DestinationID = node, Command = Request.Commands.ADDITION, AckExpected = false, ResponseExpected = true, plan = myNode.ActivePlan }; NodeAdditionResponse response = await myNode.CommsModule.SendAsync(additionRequest.DestinationID, additionRequest, Constants.COMMS_TIMEOUT, 3) as NodeAdditionResponse; Vector3 position = response.Position; List <uint?> nodeNeighbours = response.Neighbours; NetworkMapEntry neigbourEntry = new NetworkMapEntry(node, nodeNeighbours, position); NetworkMapEntry ent = new NetworkMapEntry(neigbourEntry.ID, neigbourEntry.Neighbours, neigbourEntry.Position); myNode.Router.NetworkMap.GetEntryByID(myNode.Id).Neighbours.Add(node); myNode.Router.NetworkMap.Entries.Add(ent); request.Alterations.Add(new NetworkMapAddition(ent)); request.SourceID = myNode.Id; request.SenderID = myNode.Id; propagationAllowed = true; } } return(propagationAllowed); }
public NetworkMapRemoval(NetworkMapEntry _entry) { Entry = _entry; }
public NetworkMapAddition(NetworkMapEntry _entry) { Entry = _entry; }