private Bcl.IEnumerable <MessageRoute> RemoveActors(ILocalSendingSocket <IMessage> receivingSocket)
        {
            if (socketToActorMessagesMap.TryGetValue(receivingSocket, out var actorMessages))
            {
                socketToActorMessagesMap.Remove(receivingSocket);
                foreach (var actor in actorMessages.Keys)
                {
                    actorToSocketMap.Remove(actor);
                    foreach (var message in actorMessages[actor])
                    {
                        if (messageToActorMap.TryGetValue(message, out var messageHandlers))
                        {
                            messageHandlers.Remove(actor);
                            if (!messageHandlers.Any())
                            {
                                messageToActorMap.Remove(message);
                            }
                        }

                        yield return(new MessageRoute {
                            Message = message, Receiver = actor
                        });
                    }
                }
            }
        }
示例#2
0
 public ActorHostFactory(ISecurityProvider securityProvider,
                         ILocalSocket <IMessage> localRouterSocket,
                         ILocalSendingSocket <InternalRouteRegistration> internalRegistrationsSender,
                         ILocalSocketFactory localSocketFactory,
                         ILogger logger)
 {
     this.securityProvider            = securityProvider;
     this.localRouterSocket           = localRouterSocket;
     this.internalRegistrationsSender = internalRegistrationsSender;
     this.localSocketFactory          = localSocketFactory;
     this.logger = logger;
 }
示例#3
0
 public ScaleOutListener(ISocketFactory socketFactory,
                         ILocalSendingSocket <IMessage> localRouterSocket,
                         IScaleOutConfigurationManager scaleOutConfigurationManager,
                         ISecurityProvider securityProvider,
                         IPerformanceCounterManager <KinoPerformanceCounters> performanceCounterManager,
                         ILogger logger)
 {
     this.socketFactory                = socketFactory;
     this.localRouterSocket            = localRouterSocket;
     this.scaleOutConfigurationManager = scaleOutConfigurationManager;
     this.securityProvider             = securityProvider;
     this.performanceCounterManager    = performanceCounterManager;
     this.logger = logger;
 }
示例#4
0
        public bool Equals(ILocalSendingSocket <T> other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return(GetIdentity() == other.As <ILocalSocket <T> >()
                   .GetIdentity());
        }
示例#5
0
 public ScaleOutListener(ISocketFactory socketFactory,
                         ILocalSendingSocket <IMessage> localRouterSocket,
                         IScaleOutConfigurationManager scaleOutConfigurationManager,
                         ISecurityProvider securityProvider,
                         IPerformanceCounterManager <KinoPerformanceCounters> performanceCounterManager,
                         ILogger logger)
 {
     this.socketFactory                = socketFactory;
     this.localRouterSocket            = localRouterSocket;
     this.scaleOutConfigurationManager = scaleOutConfigurationManager;
     this.securityProvider             = securityProvider;
     this.performanceCounterManager    = performanceCounterManager;
     receiptConfirmationQueue          = new BlockingCollection <Message>(new ConcurrentQueue <Message>());
     this.logger = logger;
 }
        private Bcl.IEnumerable <MessageRoute> RemoveMessageHub(ILocalSendingSocket <IMessage> receivingSocket)
        {
            // Should not be many, we can iterate the collection
            var messageHub = messageHubs.Where(kv => kv.Value.Equals(receivingSocket))
                             .Select(kv => kv.Key)
                             .FirstOrDefault();

            if (messageHub != null)
            {
                messageHubs.Remove(messageHub);

                yield return(new MessageRoute {
                    Receiver = messageHub
                });
            }
        }
 public ClusterHealthMonitor(ISocketFactory socketFactory,
                             ILocalSocketFactory localSocketFactory,
                             ISecurityProvider securityProvider,
                             ILocalSendingSocket <IMessage> routerLocalSocket,
                             IConnectedPeerRegistry connectedPeerRegistry,
                             ClusterHealthMonitorConfiguration config,
                             ILogger logger)
 {
     deadPeersCheckInterval     = TimeSpan.FromDays(1);
     this.socketFactory         = socketFactory;
     this.securityProvider      = securityProvider;
     multiplexingSocket         = localSocketFactory.Create <IMessage>();
     this.config                = config;
     this.routerLocalSocket     = routerLocalSocket;
     this.connectedPeerRegistry = connectedPeerRegistry;
     this.logger                = logger;
 }
示例#8
0
 public ActorHost(IActorHandlerMap actorHandlerMap,
                  IAsyncQueue <AsyncMessageContext> asyncQueue,
                  IAsyncQueue <ActorRegistration> actorRegistrationsQueue,
                  ISecurityProvider securityProvider,
                  ILocalSocket <IMessage> localRouterSocket,
                  ILocalSendingSocket <InternalRouteRegistration> internalRegistrationsSender,
                  ILocalSocketFactory localSocketFactory,
                  ILogger logger)
 {
     this.logger                      = logger;
     this.actorHandlerMap             = actorHandlerMap;
     this.securityProvider            = securityProvider;
     this.localRouterSocket           = localRouterSocket;
     this.internalRegistrationsSender = internalRegistrationsSender;
     this.asyncQueue                  = asyncQueue;
     this.actorRegistrationsQueue     = actorRegistrationsQueue;
     receivingSocket                  = localSocketFactory.Create <IMessage>();
 }
示例#9
0
 public MessageHub(ICallbackHandlerStack callbackHandlers,
                   ILocalSocket <IMessage> localRouterSocket,
                   ILocalSendingSocket <InternalRouteRegistration> internalRegistrationsSender,
                   ILocalSocketFactory localSocketFactory,
                   IScaleOutConfigurationProvider scaleOutConfigurationProvider,
                   ISecurityProvider securityProvider,
                   ILogger logger,
                   bool keepRegistrationLocal = false)
 {
     this.logger                        = logger;
     this.localRouterSocket             = localRouterSocket;
     this.internalRegistrationsSender   = internalRegistrationsSender;
     this.scaleOutConfigurationProvider = scaleOutConfigurationProvider;
     this.securityProvider              = securityProvider;
     this.keepRegistrationLocal         = keepRegistrationLocal;
     this.callbackHandlers              = callbackHandlers;
     registrationsQueue                 = new BlockingCollection <CallbackRegistration>(new ConcurrentQueue <CallbackRegistration>());
     receivingSocket                    = localSocketFactory.Create <IMessage>();
     ReceiverIdentifier                 = ReceiverIdentities.CreateForMessageHub();
 }
示例#10
0
 public Bcl.IEnumerable <MessageRoute> RemoveReceiverRoute(ILocalSendingSocket <IMessage> receivingSocket)
 => RemoveActors(receivingSocket)
 .Concat(RemoveMessageHub(receivingSocket))
 .ToList();