public PeerRemoveResult RemoveMessageRoute(ExternalRouteRemoval routeRemoval) { var connectionAction = PeerConnectionAction.NotFound; var nodeIdentifier = new ReceiverIdentifier(routeRemoval.NodeIdentifier); if (nodeToConnectionMap.TryGetValue(nodeIdentifier, out var connection)) { connectionAction = PeerConnectionAction.KeepConnection; if (routeRemoval.Route.Receiver.IsMessageHub()) { RemoveMessageHubRoute(routeRemoval); } else { if (routeRemoval.Route.Receiver.IsActor()) { RemoveActorRoute(routeRemoval); } else { RemoveActorsByMessage(routeRemoval, nodeIdentifier); } } if (!nodeActors.ContainsKey(nodeIdentifier) && !nodeMessageHubs.ContainsKey(nodeIdentifier)) { nodeToConnectionMap.Remove(nodeIdentifier); connectionAction = RemovePeerNode(connection); roundRobinList.Remove(connection.Node); logger.Debug($"External route removed Uri:{connection?.Node.Uri.AbsoluteUri} Node:{nodeIdentifier}"); } } return(new PeerRemoveResult { ConnectionAction = connectionAction, Uri = connection?.Node.Uri }); }