/// <inheritdoc />
        public void AddToGroup(T key, string userId, string connectionId)
        {
            lock (_locker)
            {

                if (!RolesGroup.ContainsKey(key))
                    RolesGroup.Add(key, new List<HubUser> { new HubUser(userId, connectionId) });

                else if (RolesGroup.ContainsKey(key))
                {
                    var user = RolesGroup[key].Find(x => x.UserId == userId);

                    if (user == null)
                        RolesGroup[key].Add(new HubUser(userId, connectionId));

                    user?.ConnectionIds.Add(connectionId);
                }

                OnGroupChange?.Invoke(this, new ManagerEventArgs<T, HubUser>
                {
                    Action = ManagerAction.AddItem,
                    Key = key,
                    Value = new HubUser(userId, connectionId)
                });
            }
        }
        /// <summary>
        /// Remove user connection from group
        /// </summary>
        /// <param name="userId">User identifier</param>
        /// <param name="connectionId">user connection identifier</param>
        public void RemoveFromGroup(string userId, string connectionId)
        {
            lock (_locker)
            {
                foreach (var item in RolesGroup.ToList())
                {
                    var user = RolesGroup[item.Key].Find(x => x.UserId == userId);

                    if (user != null)
                    {
                        if (user.ConnectionIds.Count > 1)
                            user.ConnectionIds.Remove(connectionId);
                        else
                            RolesGroup[item.Key].Remove(user);

                        OnGroupChange?.Invoke(this, new ManagerEventArgs<T, HubUser>
                        {
                            Action = ManagerAction.RemoveItem,
                            Key = item.Key,
                            Value = user
                        });
                    }

                    if (RolesGroup[item.Key].Count == 0)
                        RolesGroup.Remove(item.Key);
                }
            }
        }