private void OnRequestPeersMessageDirect(RequestPeersMessage m) { var peers = allPeers.ToList(); peers.Sort(peerComparer); var peersToSend = peers.Where(peer => peer.Status == PeerStatus.Connected && peer.Hash != Hash); peersToSend = peersToSend.Take(m.Count); var peersAddresses = peersToSend.Select(peer => peer.Address); var message = new PeersMessage(peersAddresses.ToList()); Connection.SendObject(typeof(PeersMessage).Name, message); foreach (var peer in peersToSend) { peer.SendToOthersCount++; } }
private void OnRequestPeersMessageWithTracker(object sender, MessageEventArgs e) { if (e.SenderAddress.Equals(Address)) { var message = e.Message as RequestPeersMessage; var peers = allPeers.ToList(); peers.Sort(peerComparer); var peersToSend = peers.Where(peer => peer.Status == PeerStatus.Connected && peer.Hash != Hash); peersToSend = peersToSend.Take(message.Count); var peersAddresses = peersToSend.Select(peer => peer.Address); var messageToSend = new PeersMessage(peersAddresses.ToList()); tracker.SendMessageToPeer(messageToSend, this); foreach (var peer in peersToSend) { peer.SendToOthersCount++; } } }