public void TryPeer(IPeer peer) { Peer = peer; if (Peer == null) { throw new InvalidOperationException($"Peer cannot be null."); } if (RequestMessage == null) { throw new InvalidOperationException($"RequestMessage cannot be null."); } if (!HasTimedOut) { throw new InvalidOperationException($"Cannot switch peer before timeout."); } if (HasReachedMaxRetry) { throw new InvalidOperationException($"Cannot retry : max retry count reached."); } TriedPeers.Add(peer); Peer.EnqueueOutgoing(RequestMessage); _timeoutTimer.Start(); HasTimedOut = false; RetryCount++; }