Exemplo n.º 1
0
 public void ParseAddressesRequest(AddressesRequest request, Peer source)
 {
     AddPeerToMe(source);
     if (WantedAdresses(request, source))
     {
         foreach (var peer in request.Peers)
         {
             AddPeerToMe(peer);
         }
     }
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }