internal IEnumerable GetRoutedEndpoints()

in src/Microsoft.Azure.SignalR.Common/ServiceConnections/MultiEndpointServiceConnectionContainer.cs [183:257]


    internal IEnumerable<ServiceEndpoint> GetRoutedEndpoints(ServiceMessage message)
    {
        if (!_routerEndpoints.needRouter)
        {
            return _routerEndpoints.endpoints;
        }
        var endpoints = _routerEndpoints.endpoints;
        switch (message)
        {
            case BroadcastDataMessage bdm:
                return _router.GetEndpointsForBroadcast(endpoints);

            case GroupBroadcastDataMessage gbdm:
                return _router.GetEndpointsForGroup(gbdm.GroupName, endpoints);

            case JoinGroupWithAckMessage jgm:
                return _router.GetEndpointsForGroup(jgm.GroupName, endpoints);

            case LeaveGroupWithAckMessage lgm:
                return _router.GetEndpointsForGroup(lgm.GroupName, endpoints);

            case MultiGroupBroadcastDataMessage mgbdm:
                return mgbdm.GroupList.SelectMany(g => _router.GetEndpointsForGroup(g, endpoints)).Distinct();

            case ConnectionDataMessage cdm:
                return _router.GetEndpointsForConnection(cdm.ConnectionId, endpoints);

            case MultiConnectionDataMessage mcd:
                return mcd.ConnectionList.SelectMany(c => _router.GetEndpointsForConnection(c, endpoints)).Distinct();

            case UserDataMessage udm:
                return _router.GetEndpointsForUser(udm.UserId, endpoints);

            case MultiUserDataMessage mudm:
                return mudm.UserList.SelectMany(g => _router.GetEndpointsForUser(g, endpoints)).Distinct();

            case UserJoinGroupMessage ujgm:
                return _router.GetEndpointsForGroup(ujgm.GroupName, endpoints).Intersect(_router.GetEndpointsForUser(ujgm.UserId, endpoints));

            case UserJoinGroupWithAckMessage ujgm:
                return _router.GetEndpointsForGroup(ujgm.GroupName, endpoints).Intersect(_router.GetEndpointsForUser(ujgm.UserId, endpoints));

            case UserLeaveGroupMessage ulgm:
                return _router.GetEndpointsForGroup(ulgm.GroupName, endpoints).Intersect(_router.GetEndpointsForUser(ulgm.UserId, endpoints));

            case UserLeaveGroupWithAckMessage ulgm:
                return _router.GetEndpointsForGroup(ulgm.GroupName, endpoints).Intersect(_router.GetEndpointsForUser(ulgm.UserId, endpoints));

            case CheckConnectionExistenceWithAckMessage checkConnectionMessage:
                return _router.GetEndpointsForConnection(checkConnectionMessage.ConnectionId, endpoints);

            case CheckUserExistenceWithAckMessage checkUserMessage:
                return _router.GetEndpointsForUser(checkUserMessage.UserId, endpoints);

            case CheckGroupExistenceWithAckMessage checkGroupMessage:
                return _router.GetEndpointsForGroup(checkGroupMessage.GroupName, endpoints);

            case CheckUserInGroupWithAckMessage checkUserInGroupMessage:
                return _router.GetEndpointsForGroup(checkUserInGroupMessage.GroupName, endpoints).Intersect(_router.GetEndpointsForUser(checkUserInGroupMessage.UserId, endpoints));

            case CloseConnectionMessage closeConnectionMessage:
                return _router.GetEndpointsForConnection(closeConnectionMessage.ConnectionId, endpoints);

            case ClientInvocationMessage clientInvocationMessage:
                return _router.GetEndpointsForConnection(clientInvocationMessage.ConnectionId, endpoints);

            case ServiceCompletionMessage serviceCompletionMessage:
                return _router.GetEndpointsForConnection(serviceCompletionMessage.ConnectionId, endpoints);

            // ServiceMappingMessage should never be sent to the service

            default:
                throw new NotSupportedException(message.GetType().Name);
        }
    }