using Masuit.Tools;
using Masuit.Tools.DateTimeExt;
using Masuit.Tools.Hardware;
using Masuit.Tools.Systems;
using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Concurrent;
using System.Linq;
using System.Threading;
using System.Threading.Channels;
using System.Threading.Tasks;
namespace Masuit.MyBlogs.Core.Hubs
{
    /// 
    /// 性能计数器
    /// 
    public class PerformanceCounter
    {
        /// 
        /// 当前时间戳
        /// 
        public double Time { get; set; }
        /// 
        /// CPU当前负载
        /// 
        public double CpuLoad { get; set; }
        /// 
        /// 内存使用率
        /// 
        public double MemoryUsage { get; set; }
        /// 
        /// 磁盘读
        /// 
        public double DiskRead { get; set; }
        /// 
        /// 磁盘写
        /// 
        public double DiskWrite { get; set; }
        /// 
        /// 网络上行
        /// 
        public double Upload { get; set; }
        /// 
        /// 网络下行
        /// 
        public double Download { get; set; }
    }
    /// 
    /// hub
    /// 
    public class MyHub : Hub
    {
        /// 
        /// 性能计数器缓存
        /// 
        public static ConcurrentLimitedQueue PerformanceCounter { get; set; } = new ConcurrentLimitedQueue(5000);
        static MyHub()
        {
            Task.Run(() =>
            {
                int errorCount = 0;
                while (true)
                {
                    try
                    {
                        PerformanceCounter.Enqueue(GetCurrentPerformanceCounter());
                    }
                    catch (Exception e)
                    {
                        if (errorCount > 20)
                        {
                            break;
                        }
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(e.Message);
                        Console.ForegroundColor = ConsoleColor.White;
                        errorCount++;
                    }
                    Thread.Sleep(10000);
                }
            });
        }
        /// 
        /// 初始化
        /// 
        public static void Init()
        {
        }
        /// 
        /// 当前连接客户端
        /// 
        public static ConcurrentDictionary Connections { get; set; } = new ConcurrentDictionary();
        /// 
        /// 连接事件
        /// 
        /// 
        public override Task OnConnectedAsync()
        {
            Connections.TryAdd(Context.ConnectionId, false);
            return base.OnConnectedAsync();
        }
        /// 
        /// 注销事件
        /// 
        /// 
        /// 
        public override Task OnDisconnectedAsync(Exception exception)
        {
            Connections.TryRemove(Context.ConnectionId, out _);
            return Task.CompletedTask;
        }
        /// 
        /// 性能统计
        /// 
        /// 
        /// 
        /// 
        public ChannelReader