private Task ProcessRequestPostGroupRead(HostContext context, string groupsToken)
{
string connectionId = Transport.ConnectionId;
// Get the user id from the request
string userId = UserIdProvider.GetUserId(context.Request);
IList<string> signals = GetSignals(userId, connectionId);
IList<string> groups = AppendGroupPrefixes(context, connectionId, groupsToken);
Connection connection = CreateConnection(connectionId, signals, groups);
Connection = connection;
string groupName = PrefixHelper.GetPersistentConnectionGroupName(DefaultSignalRaw);
Groups = new GroupManager(connection, groupName);
// We handle /start requests after the PersistentConnection has been initialized,
// because ProcessStartRequest calls OnConnected.
if (IsStartRequest(context.Request))
{
return ProcessStartRequest(context, connectionId);
}
Transport.Connected = () =>
{
return TaskAsyncHelper.FromMethod(() => OnConnected(context.Request, connectionId).OrEmpty());
};
Transport.Reconnected = () =>
{
return TaskAsyncHelper.FromMethod(() => OnReconnected(context.Request, connectionId).OrEmpty());
};
Transport.Received = data =>
{
Counters.ConnectionMessagesSentTotal.Increment();
Counters.ConnectionMessagesSentPerSec.Increment();
return TaskAsyncHelper.FromMethod(() => OnReceived(context.Request, connectionId, data).OrEmpty());
};
Transport.Disconnected = clean =>
{
return TaskAsyncHelper.FromMethod(() => OnDisconnected(context.Request, connectionId, stopCalled: clean).OrEmpty());
};
return Transport.ProcessRequest(connection).OrEmpty().Catch(Trace, Counters.ErrorsAllTotal, Counters.ErrorsAllPerSec);
}