protected virtual async Task RegisterRoutes(IEnumerable <ServiceRouteDescriptor> serviceRouteDescriptors, AddressDescriptor addressDescriptor) { var registrationCentreServiceRoutes = _serviceRouteCache.ServiceRouteDescriptors.Where(p => serviceRouteDescriptors.Any(q => q.ServiceDescriptor.Equals(p.ServiceDescriptor))); var centreServiceRoutes = registrationCentreServiceRoutes as ServiceRouteDescriptor[] ?? registrationCentreServiceRoutes.ToArray(); if (centreServiceRoutes.Any()) { await RemoveExceptRouteAsyncs(registrationCentreServiceRoutes, addressDescriptor); } else { await CreateSubDirectory(); } foreach (var serviceRouteDescriptor in serviceRouteDescriptors) { var centreServiceRoute = registrationCentreServiceRoutes.SingleOrDefault(p => p.ServiceDescriptor.Equals(serviceRouteDescriptor.ServiceDescriptor)); if (centreServiceRoute != null) { serviceRouteDescriptor.AddressDescriptors = serviceRouteDescriptor.AddressDescriptors .Concat(centreServiceRoute.AddressDescriptors).Distinct().OrderBy(p => p.ToString()); } await RegisterRouteWithLockAsync(serviceRouteDescriptor); } }
public AddressModel( [NotNull] string address, [NotNull] int port, ServiceProtocol serviceProtocol = ServiceProtocol.Tcp ) { Check.NotNull(address, nameof(address)); Address = address; Port = port; ServiceProtocol = serviceProtocol; m_fuseTimes = 0; Descriptor = new AddressDescriptor() { Address = Address, Port = Port, ServiceProtocol = ServiceProtocol }; }
protected virtual async Task RemoveExceptRouteAsyncs( IEnumerable <ServiceRouteDescriptor> serviceRouteDescriptors, AddressDescriptor addressDescriptor) { var oldServiceDescriptorIds = _serviceRouteCache.ServiceRouteDescriptors.Select(i => i.ServiceDescriptor.Id).ToArray(); var newServiceDescriptorIds = serviceRouteDescriptors.Select(i => i.ServiceDescriptor.Id).ToArray(); var removeServiceDescriptorIds = oldServiceDescriptorIds.Except(newServiceDescriptorIds).ToArray(); foreach (var removeServiceDescriptorId in removeServiceDescriptorIds) { var removeRoute = _serviceRouteCache.ServiceRouteDescriptors.FirstOrDefault(p => p.ServiceDescriptor.Id == removeServiceDescriptorId); if (removeRoute != null && removeRoute.AddressDescriptors.Any()) { if (removeRoute.AddressDescriptors.Any(p => p.Equals(addressDescriptor))) { removeRoute.AddressDescriptors = removeRoute.AddressDescriptors.Where(p => !p.Equals(addressDescriptor)).ToList(); await RegisterRouteWithLockAsync(removeRoute); } } } }