Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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());
            }
        }
Esempio n. 3
0
        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);
            }
        }