public dynamic RegisterUserClient(string userId) { var user = _documentSession.Load <User>(userId); // Add user to their own group Groups.Add(Context.ConnectionId, "user-" + userId); // Get all user's memberships and add them to the corresponding group channel foreach (var membership in user.Memberships) { _backChannelService.AddUserToGroupChannel(membership.Group.Id, Context.ConnectionId); } _backChannelService.AddUserToOnlineUsersChannel(Context.ConnectionId); // ADD TO CACHE _onlineUserCache.AddUserSession(userId, Context.ConnectionId); return(BuildOnlineUserList()); }
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); }