private Bcl.IDictionary <ReceiverIdentifier, Bcl.HashSet <MessageIdentifier> > MapSocketToActor(InternalRouteRegistration routeRegistration)
 {
     if (!socketToActorMessagesMap.TryGetValue(routeRegistration.DestinationSocket, out var actorMessages))
     {
         actorMessages = new Bcl.Dictionary <ReceiverIdentifier, Bcl.HashSet <MessageIdentifier> >
         {
             [routeRegistration.ReceiverIdentifier] = new Bcl.HashSet <MessageIdentifier>()
         };
         socketToActorMessagesMap[routeRegistration.DestinationSocket] = actorMessages;
     }
     return(actorMessages);
 }
Esempio n. 2
0
        private Bcl.IEnumerable <MessageActorRoute> GetNodeActors(ReceiverIdentifier node)
        {
            return(GetNodeMessageToActorsMap()
                   .Select(ma => new MessageActorRoute
            {
                Message = ma.Key,
                Actors = ma.Value
                         .Select(a => new ReceiverIdentifierRegistration(a, false))
                         .ToList()
            })
                   .ToList());

            Bcl.IDictionary <MessageIdentifier, Bcl.HashSet <ReceiverIdentifier> > GetNodeMessageToActorsMap()
            {
                var messageActors = new Bcl.Dictionary <MessageIdentifier, Bcl.HashSet <ReceiverIdentifier> >();

                if (nodeActors.TryGetValue(node, out var actors))
                {
                    foreach (var actor in actors)
                    {
                        if (actorToMessageMap.TryGetValue(actor, out var actorMessages))
                        {
                            foreach (var message in actorMessages)
                            {
                                if (!messageActors.TryGetValue(message, out var tmpActors))
                                {
                                    tmpActors = new Bcl.HashSet <ReceiverIdentifier>();
                                    messageActors[message] = tmpActors;
                                }

                                tmpActors.Add(actor);
                            }
                        }
                    }
                }

                return(messageActors);
            }
        }