public virtual bool RegisterEndpoint(EndpointDiscoveryMetadata endpoint)
{
var registered = false;
if (AcceptEndpoint(endpoint))
{
using (var locker = @lock.ForReadingUpgradeable())
{
policies.ForEach(policy => registered = registered | policy.RegisterTarget(endpoint));
locker.Upgrade();
if (registered == false)
{
var newPolicies = policyFactory.CreatePolicies(endpoint);
Array.ForEach(newPolicies, newPolicy =>
{
registered = registered | newPolicy.RegisterTarget(endpoint);
policies.Add(newPolicy);
});
}
if (registered)
endpoints[endpoint.Address] = endpoint;
}
}
return registered;
}