protected bool MergeLists(IGossipPeer senderPeer, IList <IGossipPeer> remoteList) { var needReply = false; foreach (GossipPeer remotePeer in remoteList) { if (remotePeer.Id == _gossipNode.GossipPeer.Id) { continue; } var peer = _gossipNode.RemotePeers.FirstOrDefault(p => p.Id == remotePeer.Id); if (peer != null) { if (remotePeer.Heartbeat > peer.Heartbeat) { peer.Heartbeat = remotePeer.Heartbeat; if (peer.State == GossipPeerState.Online && remotePeer.State == GossipPeerState.Offline) { _gossipNode.DownPeer(remotePeer); } else if (peer.State == GossipPeerState.Offline && remotePeer.State == GossipPeerState.Online) { _gossipNode.WakeUpPeer(remotePeer); } } else { needReply = true; } } else { _gossipNode.AddPeer(remotePeer); } } return(needReply); }