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(); } }
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(); }