public void SubscribeActiveChatRooms(string connectionId, string userId) { using (var context = new MagicDbContext()) { var activeChatRoomIds = context.ChatRoomConnections.Where(rc => rc.UserId == userId && rc.ChatRoomId != DefaultRoomId).Select(rc => rc.ChatRoomId).Distinct(); foreach (var roomId in activeChatRoomIds) { var chatRoomConnection = new ChatRoomConnection { ChatRoomId = roomId, ConnectionId = connectionId, UserId = userId }; Groups.Add(connectionId, roomId); context.Insert(chatRoomConnection); } } }
public static void SubscribeActiveConnections(string roomId, string userId) { using (var context = new MagicDbContext()) { var activeConnectionIds = context.Connections.Where(c => c.UserId == userId).Select(c => c.Id); var subscribedConnectionIds = context.ChatRoomConnections.Where(crc => crc.UserId == userId && crc.ChatRoomId == roomId).Select(crc => crc.ConnectionId); var unsubscribedConnectionIds = activeConnectionIds.Except(subscribedConnectionIds); if (!unsubscribedConnectionIds.Any()) return; var groupsProcessed = new List<Task>(); foreach (var connectionId in unsubscribedConnectionIds) { var chatRoomConnection = new ChatRoomConnection { ChatRoomId = roomId, ConnectionId = connectionId, UserId = userId }; var chatHubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); groupsProcessed.Add(chatHubContext.Groups.Add(connectionId, roomId)); context.Insert(chatRoomConnection); } Task.WhenAll(groupsProcessed.ToArray()); } }
public async void SubscribeChatRoom(string roomId) { var chatHubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); var addToGroup = chatHubContext.Groups.Add(Context.ConnectionId, roomId); using (var context = new MagicDbContext()) { var chatRoomConnection = new ChatRoomConnection { ChatRoomId = roomId, ConnectionId = Context.ConnectionId, UserId = Context.User.Identity.GetUserId() }; context.Insert(chatRoomConnection); } await addToGroup; if (roomId != DefaultRoomId) { UpdateChatRoomUsers(roomId); } }