private void CheckPeers()
        {
            DateTime dtNow           = DateTime.UtcNow;
            bool     changed         = false;
            bool     hasCheckedPeers = false;

            for (int i = fPeers.Count - 1; i >= 0; i--)
            {
                var peer = fPeers[i];
                if (peer.IsLocal)
                {
                    continue;
                }

                if (peer.IsUnknown && (peer.PingTries >= 10 || dtNow - peer.LastUpdateTime > TimeSpan.FromMinutes(10)))
                {
                    fPeers.Remove(peer);
                    changed = true;
                    continue;
                }

                // always send ping
                SendPing(peer, (peer.State < PeerState.Checked));

                if (peer.State >= PeerState.Checked)
                {
                    hasCheckedPeers = true;
                }

                if (peer.State == PeerState.Unknown)
                {
                    fDHTClient.FindUnkPeer(peer);
                }

                SendData(peer.EndPoint, ProtocolHelper.CreateHandshakeQuery(DHTTransactions.GetNextId(), fDHTClient.LocalID));
            }

            if (hasCheckedPeers)
            {
                if (fConnectionState == ConnectionState.Connection)
                {
                    fConnectionState = ConnectionState.Connected;
                    changed          = true;
                }
            }
            else
            {
                if (fConnectionState == ConnectionState.Connected)
                {
                    fConnectionState = ConnectionState.Connection;
                    changed          = true;
                }
            }

            if (changed)
            {
                fForm.OnPeersListChanged();
            }
        }
示例#2
0
        public void Test_CreateHandshakeQuery()
        {
            var tid    = DHTTransactions.GetNextId();
            var nodeId = DHTId.CreateRandom();
            var msg    = ProtocolHelper.CreateHandshakeQuery(tid, nodeId);

            Assert.IsNotNull(msg);
            // TODO: test contents
        }
 private void CheckPeers()
 {
     foreach (var peer in fPeers)
     {
         if (!peer.IsLocal)
         {
             peer.State = PeerState.Unchecked;
             SendData(peer.EndPoint, ProtocolHelper.CreateHandshakeQuery());
         }
     }
     fForm.OnPeersListChanged();
 }