public void ParseAddressesRequest(AddressesRequest request, Peer source) { AddPeerToMe(source); if (WantedAdresses(request, source)) { foreach (var peer in request.Peers) { AddPeerToMe(peer); } } }
public bool WantedAdresses(AddressesRequest req, Peer source) { var newActive = ActiveRequestForPeers.FindAll(r => r.ElapseTime >= DateTime.Now); ActiveRequestForPeers = newActive.ToList(); bool wanted = (ActiveRequestForPeers.FindAll(r => r.From.Equals(source)).Count > 0); if (!wanted) { Logger.Log($"Rejected Addresses From: {source.ToString()} | Many: {req.Peers.Count} | all: {ActiveRequestForPeers.Count}"); } return(wanted); }
public void ParseGetAddressesRequest(GetAddressesRequest request, Peer source) { //Answer with max n peers var peersRandom = new List <Peer>(); peersRandom.AddRange(Peers); peersRandom.Shuffle(); int numberOfPeersToRespond = (peersRandom.Count >= request.MaxPeers) ? request.MaxPeers : peersRandom.Count; var responsePeers = peersRandom.Take(numberOfPeersToRespond).ToList(); var response = new AddressesRequest() { Peers = responsePeers }; AddPeerToMe(source); _server.SendResponse(response, source); }