/// <summary>
        /// Merges this response with another response.
        /// </summary>
        /// <param name="other">The other response.</param>
        public void Merge(AnnounceResponse other)
        {
            if (other == null)
            {
                throw new ArgumentNullException("other");
            }
            else if (other.tracker != tracker)
            {
                throw new ArgumentException("The responses are not from the same tracker.", "other");
            }

            if (string.IsNullOrEmpty(failureReason))
            {
                failureReason = other.failureReason;
            }
            if (string.IsNullOrEmpty(warningMessage))
            {
                warningMessage = other.warningMessage;
            }

            if (peers != null && peers.Length > 0 && other.peers != null && other.peers.Length > 0)
            {
                var peerList = new List <PeerInfo>(peers.Length + other.peers.Length);
                peerList.AddRange(peers);

                for (int i = 0; i < other.peers.Length; i++)
                {
                    if (!peerList.Contains(other.peers[i]))
                    {
                        peerList.Add(other.peers[i]);
                    }
                }

                peers = peerList.ToArray();
            }
            else
            {
                peers = other.peers;
            }
        }