Example #1
0
    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;
 }