private void UpdateShadows(ServicePeer peer)
{
foreach (var shadowedPeer in peer.ShadowedPeers ?? Enumerable.Empty<ShadowedPeerConfiguration>())
{
_peersToTheirShadows.AddOrUpdate(shadowedPeer.PeerPeerId,
new HashSet<ServicePeerShadowInformation> { new ServicePeerShadowInformation(peer, shadowedPeer.IsPersistenceProvider) },
(key, oldValue) =>
{
oldValue.Add(new ServicePeerShadowInformation(peer, shadowedPeer.IsPersistenceProvider));
return oldValue;
});
}
foreach (var pair in _peersToTheirShadows)
{
var previousEntry = pair.Value.SingleOrDefault(x => x.ServicePeer == peer);
if (previousEntry != null && !peer.ShadowedPeers.Select(x => x.PeerPeerId).Contains(pair.Key))
pair.Value.Remove(previousEntry);
}
}