protected override Task OnClientConnectedAsync()

in src/Microsoft.Azure.SignalR/ServerConnections/ServiceConnection.cs [175:219]


    protected override Task OnClientConnectedAsync(OpenConnectionMessage message)
    {
        var connection = _clientConnectionFactory.CreateConnection(message, ConfigureContext) as ClientConnectionContext;
        connection.ServiceConnection = this;

        connection.Features.Set<IConnectionMigrationFeature>(null);

        if (_cultureFeatureManager != null && connection.RequestId != null && _cultureFeatureManager.TryRemoveCultureFeature(connection.RequestId, out var cultureFeature))
        {
            CultureInfo.CurrentCulture = cultureFeature.RequestCulture.Culture;
            CultureInfo.CurrentUICulture = cultureFeature.RequestCulture.UICulture;
            connection.GetHttpContext().Features.Set<IRequestCultureFeature>(cultureFeature);
        }

        if (message.Headers.TryGetValue(Constants.AsrsMigrateFrom, out var from))
        {
            connection.Features.Set<IConnectionMigrationFeature>(new ConnectionMigrationFeature(from, ServerId));
        }

        TryAddClientConnection(connection);

        var isDiagnosticClient = false;
        message.Headers.TryGetValue(Constants.AsrsIsDiagnosticClient, out var isDiagnosticClientValue);
        if (!StringValues.IsNullOrEmpty(isDiagnosticClientValue))
        {
            isDiagnosticClient = Convert.ToBoolean(isDiagnosticClientValue.FirstOrDefault(), CultureInfo.InvariantCulture);
        }

        using (new ClientConnectionScope(endpoint: HubEndpoint, outboundConnection: this, isDiagnosticClient: isDiagnosticClient))
        {
            SignalRProtocol.IHubProtocol protocol;
            if (message.Protocol == FakeBlazorPackHubProtocol.Instance.Name)
            {
                // hack: blazorpack cannot parse it correctly, we use a fake one to workaround it.
                protocol = FakeBlazorPackHubProtocol.Instance;
            }
            else
            {
                protocol = _hubProtocolResolver.GetProtocol(message.Protocol, null);
            }
            _ = ProcessClientConnectionAsync(connection, protocol);
        }

        return Task.CompletedTask;
    }