public async Task AssignToProjectAsync(string projectId, IPrincipal user, string connectionId) { if (!activeSessions.ContainsKey(projectId)) { await AddCollabSessionAsync(projectId); } CollaboratorInfo collaborator = null; if (!user.Identity.IsAuthenticated) { AddCollaborator(projectId, CreateAnonymousCollaborator(connectionId)); } else { collaborator = activeSessions[projectId].Collaborators.SingleOrDefault( clb => clb.UserName == user.Identity.Name ); if (collaborator == null) { AddCollaborator(projectId, CreateAuthenticatedCollaborator(user, connectionId)); } else { collaborator.ConnectionIds.Add(connectionId); } } Volatile.Read(ref Connected)?.Invoke( this, new ConnToProjectEventArgs { ProjectId = projectId, ConnectionId = connectionId, User = user }); }
private void AddCollaborator(string projectId, CollaboratorInfo clbInfo) { activeSessions[projectId].Collaborators.Add(clbInfo); }