private void Execute(IDomainEvent domainEvent, Group group, User newMember, DateTime joined) { foreach (var session in newMember.Sessions) { _backChannelService.AddUserToGroupChannel(group.Id, session.ConnectionId); } var groupViewModel = _groupViewFactory.Make(group, newMember); _backChannelService.SendJoinedGroupToUserChannel(newMember.Id, groupViewModel); dynamic activity = MakeActivity( domainEvent, "userjoinedgroup", joined, string.Format("{0} joined {1}", newMember.Name, group.Name), new[] { group }); activity.UserJoinedGroup = new { User = _userViewFactory.Make(newMember, null), Group = groupViewModel }; _documentSession.Store(activity); _documentSession.SaveChanges(); }
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); }