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;
}