private PeerConnection MapNodeToConnection(ExternalRouteRegistration routeRegistration, ReceiverIdentifier nodeIdentifier) { if (!nodeToConnectionMap.TryGetValue(nodeIdentifier, out var peerConnection)) { peerConnection = new PeerConnection { Node = routeRegistration.Peer, Health = routeRegistration.Health, Connected = false }; nodeToConnectionMap[nodeIdentifier] = peerConnection; } return(peerConnection); }
private void MapMessageToActor(InternalRouteRegistration routeRegistration, MessageContract messageContract) { if (!messageToActorMap.TryGetValue(messageContract.Message, out var actors)) { actors = new HashedLinkedList <ReceiverIdentifier>(); messageToActorMap[messageContract.Message] = actors; } if (!actors.Contains(routeRegistration.ReceiverIdentifier)) { var registration = new ReceiverIdentifierRegistration(routeRegistration.ReceiverIdentifier, messageContract.KeepRegistrationLocal); actors.InsertLast(registration); } }
private void MapMessageToNode(ExternalRouteRegistration routeRegistration, ReceiverIdentifier nodeIdentifier) { var messageIdentifier = routeRegistration.Route.Message; if (!messageToNodeMap.TryGetValue(messageIdentifier, out var nodes)) { nodes = new HashedLinkedList <ReceiverIdentifier>(); messageToNodeMap[messageIdentifier] = nodes; } if (!nodes.Contains(nodeIdentifier)) { nodes.InsertLast(nodeIdentifier); } }
public Bcl.IEnumerable <ILocalSendingSocket <IMessage> > FindRoutes(InternalRouteLookupRequest lookupRequest) { HashedLinkedList <ReceiverIdentifier> actors; var sockets = new Bcl.List <ILocalSendingSocket <IMessage> >(); ILocalSendingSocket <IMessage> socket; if (lookupRequest.ReceiverIdentity.IsSet()) { if (lookupRequest.ReceiverIdentity.IsMessageHub()) { if (messageHubs.TryGetValue(lookupRequest.ReceiverIdentity, out socket)) { sockets.Add(socket); } } else { if (lookupRequest.ReceiverIdentity.IsActor()) { if (actorToSocketMap.TryGetValue(lookupRequest.ReceiverIdentity, out socket)) { if (messageToActorMap.TryGetValue(lookupRequest.Message, out actors)) { if (actors.Contains(lookupRequest.ReceiverIdentity)) { sockets.Add(socket); } } } } } } else { if (messageToActorMap.TryGetValue(lookupRequest.Message, out actors)) { if (lookupRequest.Distribution == DistributionPattern.Unicast) { if (actorToSocketMap.TryGetValue(Get(actors), out socket)) { sockets.Add(socket); } } else { if (lookupRequest.Distribution == DistributionPattern.Broadcast) { foreach (var actor in actors) { if (actorToSocketMap.TryGetValue(actor, out socket)) { sockets.Add(socket); } } } } } } return(sockets); }