namespace OASystem.API.OAMethodLib.SignalR.Hubs
{
    /// <summary>
    /// 分组
    /// </summary>
    public static class GroupStore
    {
        public static Dictionary<string, List<string>> Groups = new Dictionary<string, List<string>>();
        public static void Add(string groupname, string Id)
        {
            if (Groups.ContainsKey(groupname))
            {
                if (Groups.TryGetValue(groupname, out var values))
                {
                    if (values.Contains(Id))
                        return;
                    values.Add(Id);
                }
                else
                {
                    throw new Exception("Add group Error");
                }
            }
            else
            {
                var newvalues = new List<string>() { Id };
                Groups.Add(groupname, newvalues);
            }
        }
        public static void Remove(string groupname, string Id)
        {
            if (Groups.ContainsKey(groupname))
            {
                if (Groups.TryGetValue(groupname, out var values))
                {
                    if (!values.Contains(Id))
                        return;
                    values.Remove(Id);
                    if (!(values.Count > 0))
                        Groups.Remove(groupname);
                }
                else
                {
                    throw new Exception("Remove group Error");
                }
            }
        }
        /// <summary>
        /// 连接断开时删除
        /// </summary>
        /// <param name="Id"></param>
        public static void UnConnection(string Id)
        {
            Groups.Where(x => x.Value.Contains(Id)).AsParallel().ForAll(x => x.Value.Remove(Id));
        }

    }
}