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);
            }
        }
Example #2
0
 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);
                    }
                }
            }
        }