public void Handle(InternalRouteRegistration routeRegistration) { if (routeRegistration.ReceiverIdentifier.IsMessageHub() || routeRegistration.ReceiverIdentifier.IsActor() && routeRegistration.MessageContracts?.Any() == true) { internalRoutingTable.AddMessageRoute(routeRegistration); var routesByDomain = GetActors(routeRegistration).Concat(GetMessageHubs(routeRegistration)) .GroupBy(mh => mh.Domain); foreach (var route in routesByDomain) { clusterMonitor.RegisterSelf(route.Select(r => r.MessageRoute), route.Key); } } }
public void Handle(IMessage message, ISocket _) { if (securityProvider.DomainIsAllowed(message.Domain)) { message.As <Message>().VerifySignature(securityProvider); var payload = message.GetPayload <DiscoverMessageRouteMessage>(); var internalRoutes = internalRoutingTable.GetAllRoutes(); var messageRoutes = new List <Cluster.MessageRoute>(); if (payload.ReceiverIdentity.IsMessageHub()) { messageRoutes.AddRange(internalRoutes.MessageHubs .Where(mh => !mh.LocalRegistration && mh.MessageHub.Equals(new ReceiverIdentifier(payload.ReceiverIdentity))) .Select(mh => new Cluster.MessageRoute { Receiver = mh.MessageHub })); } else { var messageContract = new MessageIdentifier(payload.MessageContract.Identity, payload.MessageContract.Version, payload.MessageContract.Partition); messageRoutes.AddRange(internalRoutes.Actors .Where(r => r.Message.Equals(messageContract)) .SelectMany(r => r.Actors .Where(a => !a.LocalRegistration) .Select(a => new Cluster.MessageRoute { Receiver = a, Message = messageContract }))); } foreach (var messageRoute in messageRoutes) { var domains = messageRoute.Receiver.IsMessageHub() ? securityProvider.GetAllowedDomains() : new[] { securityProvider.GetDomain(messageRoute.Message.Identity) }; if (domains.Contains(message.Domain)) { clusterMonitor.RegisterSelf(messageRoute.ToEnumerable(), message.Domain); } else { logger.Warn($"MessageIdentity {messageRoute.Message} doesn't belong to requested Domain {message.Domain}!"); } } } }