public void Execute(IDomainEvent domainEvent, UserSession userSession, User user)
        {
            // Add user to the online users channel
            _backChannelService.AddUserToOnlineUsersChannel(userSession.ConnectionId);

            // If new user session, send all online users down the wire
            if (domainEvent is DomainModelCreatedEvent <UserSession> )
            {
                // Get all user's memberships and add them to the corresponding group channel
                //var memberships = _documentSession
                //    .Query<All_Users.Result, All_Users>()
                //    .AsProjection<All_Users.Result>()
                //    .Where(x => x.UserId == user.Id)
                //    .ToList()
                //    .SelectMany(x => x.User.Memberships);

                foreach (var membership in user.Memberships)
                {
                    _backChannelService.AddUserToGroupChannel(membership.Group.Id, userSession.ConnectionId);
                }

                // Return connected users (those users active less than 5 minutes ago)
                var onlineUsers = _userViewModelQuery.BuildOnlineUserList(user.Id);

                _backChannelService.SendOnlineUsersToUserChannel(user.Id, onlineUsers);
            }

            //var userStatus = new
            //    {
            //        User = _userViewFactory.Make(user)
            //    };

            // This is being removed to prevent asynchronous calling to clients to update user's statuses.
            // Rather than this approach, a call to update user status will respond with the current statuses
            // of all other online users.
            //_backChannelService.SendUserStatusUpdateToOnlineUsersChannel(userStatus);

            //var updateOnlineUsers = _userViewModelBuilder.BuildOnlineUserList();

            //_backChannelService.SendOnlineUsersUpdateToUserChannel(user.Id, updateOnlineUsers);
        }