XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

LumaTunnel

【WinUI】LumaTunnel 是一个面向个人多设备的 Windows 代理系统。客户端在本机提供 HTTP/HTTPS CONNECT 与 SOCKS5 TCP 代理,并通过一个受信任 TLS 证书保护的 WSS 会话,将多个 TCP 流复用到自建 Windows Server 节点。

公开
关注 0 Fork 0 Star 0
UTF-8
using LumaTunnel.Client.Interface;
using XFEExtension.NetCore.WinUIHelper.Implements.Services;

namespace LumaTunnel.Client.Implements;

public sealed class TrafficMeterService : GlobalServiceBase, ITrafficMeter
{
    private readonly Queue<TrafficSample> _history = new();
    private long _lastUpload;
    private long _lastDownload;

    public TrafficSample Current { get; private set; } = new(DateTimeOffset.UtcNow, 0, 0);
    public IReadOnlyList<TrafficSample> History { get { lock (_history) return _history.ToArray(); } }

    public void Sample()
    {
        var connections = AppServices.ProxyEngine.Connections;
        var upload = connections.Sum(static item => item.UploadBytes);
        var download = connections.Sum(static item => item.DownloadBytes);
        Current = new TrafficSample(
            DateTimeOffset.UtcNow,
            Math.Max(0, upload - Interlocked.Exchange(ref _lastUpload, upload)),
            Math.Max(0, download - Interlocked.Exchange(ref _lastDownload, download)));
        lock (_history)
        {
            _history.Enqueue(Current);
            while (_history.Count > 60) _history.Dequeue();
        }
    }
}